Fork me on GitHub

设计模式:工厂模式

简单工厂

简单工厂:简单工厂并非设计模式的一种。

UML如下图所示

说明

主要分为两个角色:ProductFactoryProduct是产品的抽象接口,定义了产品的行为,具体的产品会实现这个类型,定义特定的行为。而Factory是工厂类,主要负责产品的创建工作,并且统一返回Product这个接口,而非具体产品。

优势

考虑以下场景:假设我们有一个Consumer需要依赖Product

  • 首先我们将Product的创建工作从Consumer中分离出来交给了FactoryConsumer只需要关注如何使用Product。让每个角色可以各司其职,符合单一职责原则
  • 另一方面,因为ConsumerProduct中间通过Factory联系,且Factory并没有返回具体的Product,那么假设Consumer依赖的产品发生变换,或是添加了新的Product,对Consumer的修改相对来说较小。降低了ConsumerProduct耦合

工厂方法模式

UML类图:

说明

工厂方法模式中的工厂只是一个抽象的接口,具体的产品创建过程在具体的子类中实现。每种产品都有自己的工厂类去创建。

优势

相较于简单工厂,工厂方法模式的优势在于当Product的种类不断增多时,Factory不再需要不断的修改自己创建Product的方法。只需要在增加Product时,同时增加相应的Factory即可。比较好的满足了开闭原则

抽象工厂模式

UML类图:

说明

抽象工厂方法可以针对产品族进行管理,确保一系列的组件能够互相匹配。

优势

抽象工厂屏蔽了Consumer对于底层一组Product的感知,只需修改一个工厂类,就有可能调整整个Consumer的行为。对于需要依赖一系列组件工作的客户端来说,抽象工厂做到了高内聚低耦合

劣势

抽象工厂的劣势是一套组件中需要增加一个新组建时,需要修改接口中的方法,因此影响了所有工厂的实现类。

工厂模式的退化

  • 当工厂的接口和实现合并为一个类时,工厂方法模式退化成了简单工厂
  • 抽象工厂负责的产品只有一个时,变退化成了工厂方法模式

DEMO及测试代码见Github

posted @ 2019-10-25 20:12  insaneXs  阅读(120)  评论(0编辑  收藏  举报