zoukankan      html  css  js  c++  java
  • 设计模式-工厂模式

    工厂模式

    Define an interface for creating an object,but let subclasses decide whichclass to instantiate.Factory Method lets a class defer instantiation tosubclasses.
    (定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。)

    image-20200905222329509
    抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;Creator为抽象创建类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。

    简单工厂模式

    一个模块仅需要一个工厂类,没有必要把它产生出来,使用静态的方法就可以操作;

    参考《设计模式之禅》女娲造人例子:
    image-20200905223730728

    创建一个对象的时候,调用同一个方法,传入不同的参数就可以返回给我们不同的对象;

    参考代码:
    简单工厂模式

    简单工厂模式的优缺点:

    优点: 工厂类是整个工厂模式的核心,我们只需要传入给定的信息,就可以创建所需实例,在多人协作的时候,无需知道对象之间的内部依赖,可以直接创建,有利于整个软件体系结构的优化

    缺点: 工厂类中包含了所有实例的创建逻辑,一旦这个工厂类出现问题,所有实例都会受到影响,并且,工厂类中生产的产品都基于一个共同的接口,一旦要添加不同种类的产品,这就会增加工厂类的复杂度,将不同种类的产品混合在一起,
    违背了单一职责,系统的灵活性和可维护性都会降低,并且当新增产品的时候,必须要修改工厂类,违背了开闭原则『系统对扩展开放,对修改关闭』的原则

    开发中有遇到工厂获取实例方法中种类非常多,一直叠加,经常修改这个方法,甚至可能需要增加形参的数量而调整了很多地方。

    多工厂方法模式

    复杂的项目中,所有的产品类放到一个工厂方法中进行初始化会使代码结构不清晰,而且会导致这个方法越来越大。

    工厂方法模式设计多个工厂类(如何分类可以根据实际情况切分),每个分类提供一个工厂类,由调用者选择使用哪一个工厂方法。

    参考《设计模式之禅》女娲造人例子:
    多个工厂类的类图

    参考代码:
    多工厂方法模式

    多工厂方法模式优缺:

    优点:类的职责清晰,结构简单

    缺点:可扩展性,可维护性复杂。扩展一个新的产品类,需要新建一个相应的工厂类,维护还需考虑工厂类和产品类的对应关系。

    *复杂的应用采用多工厂的方法,然后再增加一个协调类,避免调用者与各个子工厂交流,协调类的作用是封装子工厂类,对高层模块提供统一的访问接口。

    自动加载工厂模式
    go test -v ./factory -test.run TestAutoloadFactoryMethod

  • 相关阅读:
    关于TileBrush中Viewbox,Viewport以及Stretch,AlignmentX/Y的详细研究
    ListBox数据绑定无效
    WPF---Effect效果
    wpf 画刷的分类
    LinearGradientBrush,RadialGradientBrush的样式说明
    改变ListBoxItem选中的颜色
    自定义的 ListBoxItem 自适应ListBox的宽度
    WPF ListBox数据绑定
    ItemsPanelTemplate的用法
    svn报错Item is not readable svn解决方案
  • 原文地址:https://www.cnblogs.com/followyou/p/13778112.html
Copyright © 2011-2022 走看看