工厂方法模式

  • 工厂方法模式(FatoryMethodPattern) 是指定义一个创建对象的接口, 但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。在工厂方法模式中用户只需要关心所需产品对应的工厂,无须关心创建细节,而且加入新的产品符合开闭原则。

类图

image.png

  • 华为和惠普都生产鼠标,创建PC工厂接口,通过华为工厂和惠普工厂来创建华为和惠普对象。
  • 优点:当小米也要生成鼠标的时候,直接加入小米和小米工厂即可,遵循开闭原则

image.png

  • 缺点:类容易过多,增加系统的复杂度,增加系统的抽象性和理解难度。

抽象工厂

  • 抽象工厂模式(Abas tract Factory Pattern) 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。
  • 抽象工厂指的是一个产品族。现在华为和惠普不仅制造鼠标还要制造键盘,鼠标和键盘是两个产品,构成了一个产品族,所以可以用抽象工厂模式。

类图

image.png

  • 抽象工厂包括一个产品族两种产品,鼠标和键盘,华为工厂和惠普工厂分别生产自己的鼠标和键盘。
  • 优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
  • 缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象工厂里加代码,又要在具体的里面加代码。

源码中设计模式