• 设计模式-工厂模式


    一、定义

    工厂方法模式是简单工厂的进一步深化,在工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的产品,而是针对不同的产品提供不同的工厂。也就是说每个产品都有一个与之对应的工厂。 定义一个创建产品的接口(工厂接口),让实现这个接口的类来决定实例化那个类,让类的实例化推迟到实现这个接口的子类中。

    Product抽象产品类:负责定义产品的共性。

    Creator抽象工厂类:负责定义工厂的共性。

    ConcreateProcuct:具体的产品实现类。

    ConcreateCreator:具体的工厂实现类,负责创建产品。

    二、类型

     创建型

    三、适用场景

    • 客户端不需要知道它所依赖的产品类是如何创建的。
    • 客户端可以通过指定工厂类的子类来创建对应的对象。

    四、优点

    • 客户端只需要知道产品对应的工厂,无需关心其创建细节。
    • 加入新产品只需要实现对应的工厂,符合开闭原则。

    五、缺点

     类的个数容易过多,增加了系统的复杂度。

    六、类图

     

    七、代码实现

     产品接口:

    package com.wms.factory;
    
    public interface Fruit {
        void produce();
    }

     产品实现类:

    package com.wms.factory;
    
    public class Banana implements Fruit {
        public void produce() {
            System.out.println("生产香蕉");
        }
    }
    package com.wms.factory;
    
    public class Apple implements Fruit {
        public void produce() {
            System.out.println("生产苹果");
        }
    }

     工厂接口:

    package com.wms.factory;
    
    public interface Factory {
        Fruit getFruit();
    }

    工厂实现类:

    package com.wms.factory;
    
    public class AppleFactory implements Factory {
        public Fruit getFruit() {
            return new Apple();
        }
    }
    package com.wms.factory;
    
    public class BananaFactory implements Factory {
        public Fruit getFruit() {
            return new Banana();
        }
    }

    客户端:

    package com.wms.factory;
    
    public class TestDesignPattern {
        public static void main(String[] args) {
            Factory appleFactory = new AppleFactory();
            Fruit apple = appleFactory.getFruit();
            apple.produce();
            Factory bananaFactory = new BananaFactory();
            Fruit banana = bananaFactory.getFruit();
            banana.produce();
        }
    } 

     八、JDK或开源框架中实现

    JDK:

  • 相关阅读:
    用友软件T3出纳通提示单据锁定
    保存单据时提示“计量单位组不正确”
    cxgrid导出数据的格式设置(转载)
    会话打印机不会自动删除解决方法
    用友U8总账对账不平问题总结
    存货核算期初无法从库存取数
    SQL Server 2000 数据库日志太大!如何管理,清除,变小,压缩它
    Delphi控件cxGrid 如何动态创建列?
    关于Treeview 选中节点高亮有关问题
    U8远程接入客户端重新安装问题
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10193222.html
Copyright © 2020-2023  润新知