设计模式-抽象工厂模式
2016-12-19 11:29
169 查看
一、定义
抽象工厂模式(Abstract Factory Pattern)是一种比较常见的模式,其定义如下:Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。)
抽象工厂模式的通用类图为:
//抽象产品类 public abstract class AbstractProductA { public void shareMethod() { //每个产品共有的方法 } //每个产品相同方法,不同实现 public abstract void doSomething(); } //产品A1的实现类 public class ProductA1 extends AbstractProductA { public void doSomething() { System.out.println("产品A1的实现方法"); } } //产品A2的实现类 public class ProductA2 extends AbstractProductA { public void doSomething() { System.out.println("产品A2的实现方法"); } } //抽象工厂类 public abstract class AbstractCreator { public abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB(); } //产品等级1的实现类 public class Creator1 extends AbstractCreator { public AbstractProductA createProductA { return new ProductA1(); } public AbstractProductB createProductB() { return new ProductB1(); } } //产品等级2的实现类 public class Creator2 extends AbstractCreator{ public AbstractProductA createProductA() { return new ProductA2(); } public AbstractProductB createProductB() { return new ProductB2(); } }
注意:有M个产品就应该有M个实现工厂类,在每个实现工厂中,实现不同产品族的生成任务。
public class Client { public static void main(String[] args) { AbstractCreator creator1 = new Creator1(); AbstractCreator creator2 = new Creator2(); AbstractProductA a1 = creator1.createProductA(); AbstractProductA a2 = creator2.createProductA(); AbstractProductB b1 = creator1.createProductB(); AbstractProductB b2 = creator2.createProductB(); } }
二、应用
2.1 优点
封装性,每个产品的实现类不是高层模块要关心的,他要关心的是接口,是抽象,他不关心对象是如何创建出来。这是由工厂类负责的,只要知道工厂类是谁,我就能创建出一个需要需要的对象。产品族内的约束为非公开状态。
2.2 缺点
最大缺点就是产品族扩展非常困难。如果我们要增加一个产品,抽象类AbstractCreator要增加一个方法,然后两个实现类都要修改,这违背了开闭原则。2.3 使用场景
一个对象族(或是一组没有任何关系的对象)都有相同的约束,就可以使用抽象工厂模式。例如一个文本编辑器和一个图片处理器,都是软件实体。但是*nixd下的文本编辑器和windows下的文本编辑器虽然功能和界面都相同,但是代码实现不同,图片处理器也有类似情况。也就是具备了相同的约束条件:操作系统类型。于是我们可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器。相关文章推荐
- 设计模式C#描述——抽象工厂模式
- .NET设计模式-抽象工厂模式(Abstract Factory)
- 设计模式C#描述——抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式——创建型模式之 Abstract Factory抽象工厂模式
- [导入]C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式C#描述——抽象工厂模式
- Java设计模式圣经连载(03)-抽象工厂模式
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 我的设计模式之旅(3)――抽象工厂模式AbstractFactory
- 设计模式实践(抽象工厂模式应用)—通信录的优化过程
- 设计模式之抽象工厂模式
- AspectJ实现设计模式(四)——抽象工厂模式
- .NET设计模式:抽象工厂模式(Abstract Factory)
- [导入]C#面向对象设计模式纵横谈(4):Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式笔记-抽象工厂模式
- .Net设计模式之抽象工厂模式(Abstract Factory)
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- 设计模式(3)-抽象工厂模式(Abstract Factory)