工厂方法

定义

image-20210424201608371

结构

该模式中,定义一个抽象的产品以及抽象的工厂,具体产品与工厂的实现交给用户。

image-20210424201708814

在具体实现中,可以利用Java的反射机制来避免修改代码。

适用场合

课程ppt上的说法是,“客户端不需要知道具体类,只需要知道其对应的工厂”。ppt上的表达我认为有一点含糊,真实的原因应该是“客户端不需要知道具体类以及其如何被构造,只需要知道其对应的工厂”。原因在于,我们可能需要生成一个html文件,但是具体使用哪一个类去生成,这样的细节交给具体的工厂方法去考虑吧!

抽象工厂模式

定义

image-20210424202630979

与工厂方法的最大区别在于,一个工厂方法往往只负责一种产品的创建,而抽象工厂则是负责多个产品的创建。

结构

与工厂方法相同,不过对应的抽象产品是多个,并且我们认为同一个抽象工厂中的产品是同一个产品族的(美的的空调不可以和格力的一块使用!)。

适用场合

当我们需要创建一系列的产品时。

建造者模式

定义

image-20210424204228809

结构

image-20210424204415061

有意思是Director,可以理解为是创建的一个脚本

Director是可以省略的。

适用场合

  1. 需要建立的产品构造比较复杂;
  2. 产品的属性相互依赖(DAG),需要指明生成顺序;
  3. 对象的创建过程独立于创建该对象的类;
  4. 隔离复杂对象的创建以及使用。

hadoop中的Configuration就是建造者模式。

原型模式

定义

image-20210424205446183

结构

image-20210424205636721

单例模式

定义

image-20210424210312667

结构

只有一个实例。