专业的JAVA编程教程与资源

网站首页 > java教程 正文

(一)java设计模式-工厂模式(java工厂模式实例)

temp10 2024-10-23 15:12:07 java教程 13 ℃ 0 评论

最近在review开发的代码,其中产品有一段功能是抽奖发送权益,权益有多种:实物权益、电子优惠券、话费等等,发放的权益在创建活动时后台配置

其中一位兄弟代码逻辑如下:

(一)java设计模式-工厂模式(java工厂模式实例)

public class CommController{
	public Res sendComm(){
  	//送话费
    if(activity.getCommodityType==1){
      mobileService.toped(user.getMobile(),100);
      .....此处省略几十行..
    }else if(activity.getCommodityType==2){//优惠券
      couponService.send(user.getUserId(),coupon.getId());
      ...此处省略几十行....
    }else if(activity.getCommodityType==3){
      ...此处省略几十行..
    }
  }
}

这么看也没啥问题,但是写这代码的兄弟不在了~ 新人接手这段代码,即使没有非常吃力,但也要逐行去看慢慢梳理,还不见得敢改这块逻辑。

说说个人看法:

这里如果用工厂模式,统?了?参、统?下结果,就能非常清晰的看到一整套发放奖品服务的完整性了。具体改造如下:

抽象类:ICommodity.java

public interface ICommodity{
  void sendCommodity(String userId,String commodityId,Integer bizId,Map<String,String> extData) throws Exception;
}

所有的奖品?论是实物、虚拟还是第三?,都需要通过我们的程序实现此接?进?处理,以保证最 终?参出参的统?性。 接?的?参包括; ?户ID 、 奖品ID 、 业务ID 以及 扩展字段 ?于处理发放实物商品时的收获地 址。

实现类改造:

mobileService、couponService 实现ICommdity接口,重写sendCommdity逻辑

增加工厂类:

CommodityFactory

public class CommodityFactory {
 public ICommodity getCommodityService(Integer commodityType) {
   switch(commodityType){
     case 1:
       return new mobileService();
     case 2:
       return new couponService();
     case 3:
       ......
     default return null;//throw new RuntimeException("不存在的商品服务类型");
   }
 }
}

好了,我们来看下结构:

|- CommodityFactory

|- ICommodity

|- mobileService

|- couponService

是不是比较清晰,一眼能看出业务结构


我们再回头看下上面那段代码,这么写是不是结构就很清晰了呢:

public class CommController{
	public Res sendComm(){
    
    CommodityFactory commodityFactory = new CommodityFactory();
    ICommodity commodityService = commodityFactory.getCommodityService(activity.getCommodityType);
  	commodityService.sendCommodity(user.getUserId(), coupon.getId(),
"791098764902132", null);
    
  }
}

???法模式并不复杂,甚?这样的开发结构在你有所理解后,会发现更加简单了。 那么这样的开发的好处知道后,也可以总结出来它的优点; 避免创建者与具体的产品逻辑耦合。满足单一职责、开闭原则

弊端:如果权益类型非常的多,那么实现类会非常多,不便维护,因此,也需要使用其他的模式进行优化

后面会继续结合本人实际工作中遇到的场景,跟大家聊聊其他模式

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表