• 【大话设计模式】工厂方法模式


    【工厂方法模式】

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

     

    【简单工厂 与 工厂方法 比较】

    【简单工厂的特点】简单工厂的工厂类中包含,包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

    以计算器为例,在客户端只要把‘+’传给工厂,工厂就给出了相应的实例,客户端只要做运算即可。

    【简单工厂的缺陷】但是,如果要增加一个功能,就需要在工厂类的方法里加分支条件,修改原有的类。

    这就等于说,不但对拓展开放,而且对修改也开放,违背了开放-封闭原则。

    【使用工厂方法】根据依赖倒转原则,把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法。然后,所有的要生产具体类的工厂实现这个接口。

    这样,一个简单工厂模式的工厂类,变成了一个工厂抽象接口和多个具体生成对象的工厂。

    如果要增加新功能,只需要增加此功能的运算类和相应的工厂类。这样就符合开发-封闭原则。

    工厂方法模式实现时,客户端需要决定实例化哪一个工厂,所以工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。

    【工厂方法的优点】工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。但是增加了额外的开发量。

    【简单工厂模式】实现计算类

    1. class OperationFactory{
    2. public static Operation createOperate(String operate){
    3. Operation oper = null;
    4. swtich(operate){
    5. case "+":
    6. oper = new OperationAdd();
    7. break;
    8. case "-":
    9. oper = new OperationSub();
    10. break;
    11. case "*":
    12. oper = new OperationMul();
    13. break;
    14. case "/":
    15. oper = new OperationDiv();
    16. break;
    17. }
    18. return oper;
    19. }
    20. }
    1. Operation oper;
    2. oper = OperationFactory.createOperate("+");

    【工厂模式实现计算类】

    1. public interface Ifactory{
    2. Operation CreateOperation();
    3. }
    4. public class AddFactory implements IFactory{
    5. @Override
    6. public Operation CreateOperation(){
    7. return new OperationAdd();
    8. }
    9. }
    10. public class SubFactory implements IFactory{
    11. @Override
    12. public Operation CreateOperation(){
    13. return new OperatioSub();
    14. }
    15. }
    16. public class MulFactory implements IFactory{
    17. @Override
    18. public Operation CreateOperaton(){
    19. return new OperationMul();
    20. }
    21. }
    22. public class DivFactory implements IFactory{
    23. @Override
    24. public OPeration CreateOperation(){
    25. return new OperationDiv();
    26. }
    27. }
    1. IFactory operFactory = new AddFactory();
    2. OPeration oper = operFactory.CreateOperation();

  • 相关阅读:
    Reactive UI -- 反应式编程UI框架入门学习(二)
    Java基础入门·多线程·线程池ThreadPool篇
    TCP重传,滑动窗口,流量控制,拥塞控制
    list去重和list倒叙
    acwing周赛 排队问题--二分+单调栈的思想
    零基础小白学Node-RED(04):仪表板
    除了账号防关联外,亚马逊卖家还要注意什么?
    离散数学 --- 谓词逻辑 --- 谓词与量词的引入
    激光雷达数据的25个重要应用介绍
    ubuntu 安装、配置FTP
  • 原文地址:https://blog.csdn.net/m0_52043808/article/details/126619528