美文网首页达叔的朋友圈们
大话设计模式读书笔记-8工厂方法模式

大话设计模式读书笔记-8工厂方法模式

作者: QuietHeart | 来源:发表于2020-03-21 10:05 被阅读0次

    第8章 雷锋依然在人间——工厂方法模式

    定义

    定义一个工厂类,包含创建对象的接口,用不同的子类工厂决定实例化那个类。将一个类的实例化,推迟到不同工厂子类中进行,而非单一工厂创建接口的不同分支。

    优点:改进简单工厂模式,将创建对象的部分进一步隔离开来,使类实现更符合开放-封闭原则,客户端满足需求变化代码改动尽量少,

    即,将简单工厂模式中创建对象的工厂类进一步抽象,定义公共抽象工厂类,再用继承它的具体工厂类创建具体对象,将创建对象的部分从函数分支中隔离出来,增加新对象就增加工厂类,无需修改已有类函数。

    实现

    • Creator: 抽象工厂类,声明抽象公共工厂方法Create(),返回抽象Product类
    • ConcreteCreator: 具体实现抽象工厂方法创建对应的具体ConcreteProduct对象(返回Product类)
    • Product: 抽象操作对象,声明公共抽象操作Opera()
    • ConcreteProduct: 具体操作对象类,具体实现公共操作接口Opera()。
    • Client: 声明Creator类并创建ConcreteCreator具体工厂,调用具体工厂Create()创建具体对象返回Product类,在调用实现的公共Opera()操作。

    实现图:

    img

    使用图:

    img

    简单工厂模式与工厂模式对比

    简单工厂模式

    • 简单工厂模式实现

      1. 定义抽象父类描述公共操作,不同子类对象具体实现操作;
      2. 用简单工厂创建子类对象,返回抽象父类型,创建的类型用分支结合参数判断。
    • 简单工厂模式客户端

      1. 指定具体工厂类(定义简单工厂对象)
      2. 指定工厂类参数(操作字符)
      3. 工厂类创建返回相应的操作对象
      4. 使用公共抽象接口操作

    简单工厂模式总结:通过继承将具体对象操作封装,使用户只使用抽象公共接口操作;通过简单工厂将对象的创建独立出来,使用户不必关心创建特定对象的过程;通过多态返回对象抽象父类,隔离具体类型,使用户不必关心返回对象的具体类型;但是没有将对象创建的过程隔离完全(即如果支持新的对象,还是要通过修改工厂类的方式;如果使用新的对象,还是要修改客户端所有为工厂类指定参数的地方替换参数)。

    工厂模式

    • 工厂模式实现

      1. 定义抽象父类描述公共操作,不同子类对象实现具体操作;
      2. 定义抽象工厂描述公共创建接口;
      3. 不同的具体工厂子类创建对应操作类(返回抽象父类);
    • 工厂模式客户端

      1. 指定具体工厂类
      2. 使用公共的工厂抽象接口创建相应对象。
      3. 使用公共抽象接口操作

    工厂模式总结:通过继承将具体对象操作封装,使用户只使用公共对象接口操作;通过抽象工厂将对象的创建独立出来,使用户不必关心创建对象的过程;通过具体工厂实现的创建,将不同对象的创建从类型判断分支中分离(即,如果支持新的对象,只需增加具体工厂类无需修改已有类;如果使用新的对象,只需修改具体工厂类创建对象前的具体工厂类型,无需修改所有后面,比如不用修改创建参数);通过多态将对象返回对象抽象父类,隔离具体类型,使用户不必关心返回对象的具体类型。

    注:定义对象后,定义对象之处的对象类别修改之后,对象名字可以共用,这就叫封装了具体的创建过程(“不需要关心类”)或者关心的很少了。

    相关文章

      网友评论

        本文标题:大话设计模式读书笔记-8工厂方法模式

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