GOF设计模式

创建型模式之工厂模式

案列分析:披萨订购为例

传统方式的设计类图--------不满足设计模式的ocp原则(对扩展开放,对修改关闭,当我们给类增加性的功能的时候,尽量不修改代码,或者尽可能少修改代码)

  • 比如我们这时要性增加一个Pizza种类,不仅需要添加该类,还要修改其他创建pizza的代码

我们可以把创建pizza对象封装 到一个类中,这样我们就有新的Pizza种类,只需要修改类就可,其他有创建到Pizza对象的代码就不需要修改了。–》简单工厂模式

简单工厂模式(静态工厂)

GOF设计模式

GOF设计模式
GOF设计模式

工厂方法模式

GOF设计模式

GOF设计模式
GOF设计模式

可以看到在类图中,对对象的创建延迟到了子类中,

这个OrderPizza充当了一个工厂的角色,通过createPizza(方法来调用,但是不是在该类工立即生成对象,而是需要通过地点+ 口味信息,通过调用不同的子类来实现创建对象,而子类又需要重写createPizza()的抽象方法,来实现创建对象的多态。

抽象工厂模式

GOF设计模式

GOF设计模式

个人小结:

  • 简单工厂模式
    • 生产同一个父类(接口)的不同子类
    • 解决原有代码不符合开闭原则,即增加子类需要修改多处调用子类的方法,使用简单工厂模式只需要修改工厂类中的方法
  • 方法工厂模式
    • 生产同一个二级父类(接口)的不同子类
    • 类的创建延迟到子类,形成二级父类,通过抽象方法,子类实现不同抽象方法,来生成不同的子类对象
    • 简单的例子就是:原本生成多种鼠标的类,现在需要生成多种键盘,增加了复杂性,使用仅仅多个简单分别创建,不符合开闭原则,将对多个工厂类的创建封装到抽象方法中,通过子类的不同实现,来完成
  • 抽象工厂模式
    • 实际上就是在方法工厂模式的基础上,使用工厂抽象化,要解决的问题同方法工厂
    • 抽象工厂模式 = 方法工厂模式 + 简单工厂模式
    • 用接口的方式抽象化,不同的工厂对象, 不同的工厂实现接口的抽象方法(实现抽象方法中调用了不同的接口),解决了该问题。