设计模式之抽象工厂模式
来源:互联网 发布:日本社交软件 编辑:程序博客网 时间:2024/05/22 11:36
抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
一、抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。其UML图如下:
抽象工厂模式由以下部分组成:
抽象工厂(AbstractFactory):超级工厂,用来创建其他工厂。
具体工厂(ConcreteFactory):具体工厂“继承”抽象工厂。
抽象产品(AbstractProduct):生产某个产品。
具体产品(ConcreteProduct):具体产品”继承“抽象产品。
二、案例分析
在设计模式系列之工厂方法模式中,我们以《西游记》中妖怪的背景,介绍了工厂方法,但妖怪不仅有强大的背景,还要有一群小弟啊,才能和孙悟空抗衡啊,显然工厂方法已经满足不了我们的要求了,这样的情况就要用到抽象工厂模式,其UML图如下:
代码部分:
抽象工厂:生产既有背景又有小弟的妖怪
abstract class AbstractFactory{ public abstract AbstractBGProduct backGroundFactory(); public abstract AbstractEProduct Factory();}
具体工厂:
class ConcreteFactory1 extends AbstractFactory{ @Override public AbstractBGProduct backGroundFactory() { return new BGProduct1(); } @Override public AbstractEProduct Factory() { return new EProduct1(); }}class ConcreteFactory2 extends AbstractFactory{ @Override public AbstractBGProduct backGroundFactory() { return new BGProduct2(); } @Override public AbstractEProduct Factory() { return new EProduct2(); }}
抽象产品:① 产生背景 ②配备小弟
abstract class AbstractBGProduct{ public abstract void backGround();}abstract class AbstractEProduct{ public abstract void employee();}
具体产品:
class BGProduct1 extends AbstractBGProduct{ public void backGround() { System.out.println("我是金皘洞兕大王,我要吃唐僧肉,我本是太上老君的青牛。"); }}class BGProduct2 extends AbstractBGProduct{ public void backGround() { System.out.println("我是黄眉怪,我要吃唐僧肉。我本是弥勒的童儿。"); }}class EProduct1 extends AbstractEProduct{ public void employee() { System.out.println("我兕大王的小弟有很多。"); }}class EProduct2 extends AbstractEProduct{ public void employee() { System.out.println("孩儿们,你们在那里?"); }}
故事上演:
public class FactoryMethod { public static void main(String[] args) { AbstractFactory af = new ConcreteFactory1(); AbstractBGProduct bg = af.backGroundFactory(); AbstractEProduct emp = af.Factory(); bg.backGround(); emp.employee(); System.out.println("再来一个妖精"); af = new ConcreteFactory2(); bg = af.backGroundFactory(); emp = af.Factory(); bg.backGround(); emp.employee(); }}
运行结果(亲测结果可以通过):
代码地址: AbstractFactory
三、工厂方法模式和抽象工厂模式的区别
工厂方法模式:
一个抽象产品类,可以派生多个具体产品类
一个抽象工厂类,可以派生多个具体工厂类
每个具体工厂类只能创建一个具体产品类的实例
抽象工厂模式:
多个抽象产品类,每个抽象产品类,可以派生多个具体产品类
一个抽象工厂类,可以派生多个具体工厂类
每个具体工厂类可以创建多个具体产品类的实例
综上,抽象工厂模式是工厂方法模式的升级版本,它用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。
在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。
欢迎大家留言评论,点击查看更多设计模式。
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之-抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- Android memory corruption debugger
- 数组名=&数组名
- 由主页界面引出的几个知识点(五)
- 大数据
- Java并发学习(一)
- 设计模式之抽象工厂模式
- 关于两个任意长度的数字相乘的代码设计(不使用BigDecimal的情况下)
- Python模拟登陆CSDN
- 顺序表——插入不重复元素
- 遥感图像波段运算:分段公式叶面积指数计算
- HTML表格
- Python学习:HTML表单
- Python中的多进程和多线程
- Zookeeper is not connected yet!