zoukankan      html  css  js  c++  java
  • 1.2简单工厂模式,工厂方法模式

    1.简单工厂模式
         
         对象的集中管理,是把对象放在工厂类当中,那么如何避免工厂类重复new操作?
         a.通过构造函数进行注入。
         b.设置工厂类为Singleton模式或者使用static方式。static更像API的集合,因为他不能被继承,Singleton更像面向对象。
     
          
     
          客户端调用:
          OperationFactory factory=new OperationFactory();
          IOperation oper= factory.CreateOperation("+");  //或枚举  OperEnum.A
          oper.NumA = 1;
          oper.NumB = 2;
          double result = oper.GetResult();    
     
         简单工厂的一个:对象的new过程进行集中管理,通过接口或抽象,使得客户端从依赖具体的对象,变成依赖接口和配置,通过不同的配置,生成不同的对象。保证了上层调用的稳定性。
         简单工厂的一个缺点客户端对Factory还是存在着依赖关系,而且如果新增乘法操作,那么工厂类代码必须修改(增加case判断),这违背了开闭原则。
       
     
    2.工厂方法模式
         概念:使得一个类的实例化,延迟到了子类。
         简单工厂的一个扩展,增加了一个抽象工厂,具体工厂。形成四个角色。把类的实例化延迟到子类,即把类的new()工作放在具体工厂实现。
         
          
         
          客户端调用:
          IFactory factory=new AddFactory();
          IOperation operation=factory.CreateOperation();  //多态性:同一个方法名称,不同的表现形态
          operation.NumA = 1;
          opertaion.NumB = 2;
          double result=operation.GetResult();
        
        工厂方法模式的一个: 此时如果增加乘法操作,只需要扩展增加MutiOpertaion类和MutiFactory工厂类即可,原来的产品类和工厂类体系保持稳定,这符合开闭原则和依赖倒置原则。
         
        工厂方法模式的一个缺点: 这里的优点也是缺点,即工厂方法把原来的简单工厂的内部逻辑判断,转移到了客户端上面,原来是修改工厂类,现在是修改客户端,如果客户端有100个呢?同时增加类的过程,也是增加开发量的过程。
              而且虽然对象的实例化延迟到了子类,但是依赖始终存在,只不过转嫁到另一个对象身上。为此工程中往往最后吧推不掉的依赖关系转嫁到配置文件上。这样工厂方法模式往往被演绎成:“工厂方法+依赖注入+配置文件访问”。
     
       简单工厂VS工厂方法
       工厂方法客服了简单工厂的违背开闭原则的缺点,又保持了集中封装对象的创建过程的优点;同时使用多态性,保持了简单工厂的优点,克服了他的缺点。
  • 相关阅读:
    Maven关于web.xml中Servlet和Servlet映射的问题
    intellij idea的Maven项目运行报程序包找不到的错误
    修改Maven项目默认JDK版本
    刷题15. 3Sum
    刷题11. Container With Most Water
    刷题10. Regular Expression Matching
    刷题5. Longest Palindromic Substring
    刷题4. Median of Two Sorted Arrays
    刷题3. Longest Substring Without Repeating Characters
    刷题2. Add Two Numbers
  • 原文地址:https://www.cnblogs.com/jackyfei/p/3620885.html
Copyright © 2011-2022 走看看