设计模式01——静态工厂工厂方法抽象工厂

Posted jacky_bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式01——静态工厂工厂方法抽象工厂相关的知识,希望对你有一定的参考价值。

静态工厂模式

优点:

1、应用简单,createProduct方法是静态方法,它负责创建产品类的实例。

缺点

1、当产品存在复杂的、多层次的等级结构时,在什么时候创建哪些产品的实例,完全由工厂类负责,使得工厂方法的逻辑过于复杂,且不利于扩展。

2、工厂方法是静态方法,无法由子类继承。

应用场景:适用于逻辑较为简单的工厂方法。

应用示例:java中的DateFormat类是一个抽象类,它的getDateInstance方法返回的是DateFormat的子类,比如SimpleDateFormat。

 

工厂方法模式

 

 

优点:

1、弥补了静态工厂模式的不足,为工厂类提供了多态性的可能。

缺点

1、从上图看,产品角色是单一的产品等级结构,如果存在多个产品等级结构(把IProduct复制出IProduct1、IProduct2),工厂方法无法得知它应该创建哪个产品等级(IProduct、IProduct1、IProduct2)的产品子类,此时,工厂方法模式无能为力。

应用场景:适用于单一产品等级结构的场景。

应用示例:java.util.Collection接口的iterator方法,就是一个工厂方法。它要求所有实现了Collection接口的子类,返回一个Iterator类型的对象,而Iterator是一个接口,它定义了一个抽象产品。

 

抽象工厂模式

 

 

优点:

1、弥补了工厂方法模式的不足,可支持多个产品等级结构。

缺点

1、当新增一个产品族(MacFactory)时,在产品等级结构数目不变的情况下,每一个产品等级结构下需要新增一个或多个新的具体产品角色(MacButton、MacText),同时加入新的具体工厂类,不涉及修改现有的工厂角色或产品角色,此时,抽象工厂模式支持开闭原则。当新增一个产品等级结构时,需要修改所有的工厂角色,为每一个工厂类都增加一个新的工厂方法,此时,抽象工厂模式不支持开闭原则。

应用场景:适用于多个产品等级结构的场景。

应用示例:java.awt.Tooltik对应IAbstractFactory,java.awt.peer.ButtonPeer对应IProduct

 

以上是关于设计模式01——静态工厂工厂方法抽象工厂的主要内容,如果未能解决你的问题,请参考以下文章

简单工厂模式+工厂方法模式+抽象工厂模式

工厂模式 - 总结

JAVA设计模式——工厂模式简单工厂模式工厂方法模式抽象工厂模式

设计模式:简单工厂工厂方法抽象工厂之小结与区别

工厂模式&抽象工厂——HeadFirst设计模式学习笔记

oop设计模式抽象总结