美文网首页
设计模式之工厂方法模式

设计模式之工厂方法模式

作者: 小螺丝钉cici | 来源:发表于2019-05-10 15:45 被阅读0次

    场景1:

    image.png

    场景2:

    image.png

    工厂模式的概念

    实例化对象,用工厂方法代替 new 操作。
    工厂模式包括工厂方法模式和抽象工厂模式。
    抽象工厂模式是工厂方法模式的扩展。

    image.png image.png

    工厂模式的意图

    定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。
    工厂方法把实例化的工作推迟到子类中去实现

    工厂模式的应用场景

    有一组类似的对象需要创建
    (eg:支付返回工厂)
    在编码时不能预见需要创建哪种类的实例。
    (eg:暂时的业务不知道究竟还有多少其他的支付公司类型的返回)
    系统礐要考虑扩展性,不应依赖于产品类实例如何被创建组合和表达的细节。

    工厂模式的设计思想

    尽量松耦合,一个对象的依赖对象的变化与本身无关
    具体产品与客户端剥离,责任分割

    工厂模式的好处

    1.系统可以在不修改具体工厂角色的情况下引进新的产品
    2.客户端不必关心对象如果创建,明确了职责
    3.更好的理解面向对象的原则面向接口编程,而不要面向实现编程

    工厂方法模式和抽象工厂模式对比:
    工厂模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成是工厂模式的推广工厂模式用来创建一个产品的等级结构,而抽象工厂模式是用来创建多个产品的等级结构工厂模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类

    工厂模式的项目运用

    @Component
    public class PayResultProcessorFactory {
    
    @Autowired
    private DubboCacheManager dubboCacheManager;
    
    @Autowired
    private AgreementRepayTokenInfoService agreementRepayTokenInfoService;
    
    @Autowired
    private TaskExecutor taskExecutor;
    
      public PayResultProcessor generatorPayResultProcessor(String serviceName){
       //单笔代收
       if(PayRequestType.SIGNAL_PAY_APPLY.equals(serviceName)){
         return new KjtPayResultProcessor();
       }
       //单笔非第一次还款的
       else if(PayRequestType.CERTIFICATION_PAY.equals(serviceName)){
          return new KjtRepayResultProcessor();
       }
       //协议支付签约并支付
       else if(PayRequestType.CRAD_REGISTER_AND_PAY.equals(serviceName)){
           return new KjtSmsRepayResultProcessor(dubboCacheManager,
                   taskExecutor,agreementRepayTokenInfoService);
       }
       //签约并支付申请确认接口
       else if(PayRequestType.CARD_REGISTER_AND_PAY_CONFIRM.equals(serviceName)){
             return new KjtSmsConfirmRepayResultProcessor();
       }
       //代收代付查询接口
       else if(PayRequestType.TRADE_QUERY.equals(serviceName)){
            return new KjtQueryPayResultProcessor();
       }
       //绑卡接口
       else if(PayRequestType.CARD_REGISTER_QUERY.equals(serviceName)){
            return new KjtBindCardResultProcessor(dubboCacheManager);
       }
       //银行卡解绑接口
       else if(PayRequestType.CARD_REGISTER_ABANDON.equals(serviceName)){
         return new UnBindCardResultProcessor(agreementRepayTokenInfoService);
       }
       //啥都不是默认
       else{
           return new DefaultPayResultProcessor();
       }
    
        }
     }
    

    相关文章

      网友评论

          本文标题:设计模式之工厂方法模式

          本文链接:https://www.haomeiwen.com/subject/sgsaoqtx.html