本文共 2096 字,大约阅读时间需要 6 分钟。
抽象工厂模式(Abstract Factory Pattern),又称工具箱模式(Kit/Toolkit):为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类,封装了变化,隔离了变化,让客户端代码变得稳定。
在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口。
产品等级:即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。
产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中,海尔电视机、海尔电冰箱构成了一个产品族。
工厂模式和抽象工厂模式的区别
用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象。抽象工厂模式是工厂方法模式的升级版,它用来创建一组相关或者相互依赖的对象。 它与工厂方法模式的区别在于:工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品等级结构,表现为一个接口或抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类,如上图中的ProductA和ProductB。//抽象工厂,返回产品的类型(A和B是两种关联产品(鸡腿和可乐))public interface AbstractFactory { /** * 创建产品A * @return */ public AbstractProductA createProductA(); /** * 创建产品B * @return */ public AbstractProductB createProductB();}//公共的产品接口,可以理解为抽象的鸡腿public interface AbstractProductA { }//公共的产品接口,可以理解为抽象的可乐public interface AbstractProductB { }//具体工厂,生产鸡腿和可乐的套餐(德克士)public class ConcreteFactory1 implements AbstractFactory { @Override public AbstractProductA createProductA() { // TODO Auto-generated method stub return new ProductA1(); } @Override public AbstractProductB createProductB() { // TODO Auto-generated method stub return new ProductB1(); }}//具体工厂,生产鸡腿和可乐的套餐(肯德基)public class ConcreteFactory2 implements AbstractFactory { @Override public AbstractProductA createProductA() { return new ProductA2(); } @Override public AbstractProductB createProductB() { return new ProductB2(); }}//分别生产的工厂,这里理解为德克士的鸡腿public class ProductA1 implements AbstractProductA { }//分别生产的工厂,这里理解为肯德基的鸡腿public class ProductA2 implements AbstractProductA { }//分别生产的工厂,这里理解为德克士的可乐public class ProductB1 implements AbstractProductB { }//分别生产的工厂,这里理解为肯德基的可乐public class ProductB2 implements AbstractProductB { }
上一篇:
下一篇:转载地址:http://rlrai.baihongyu.com/