设计模式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——静态工厂工厂方法抽象工厂的主要内容,如果未能解决你的问题,请参考以下文章