首页 > 其他 > 详细

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

时间:2021-06-15 09:44:24      阅读:20      评论:0      收藏:0      [点我收藏+]

静态工厂模式

技术分享图片

优点:

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——静态工厂、工厂方法、抽象工厂

原文:https://www.cnblogs.com/jacky-bear/p/14883883.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!