如何让孩子爱上设计模式 —— 6.抽象工厂模式(Abstract Factory Pattern)

标签: 设计模式初涉


描述性文字

上节通过小猪开奶茶店的例子引入了简单工厂模式与工厂方法模式,
本节我们来继续通过这个例子引出抽象工厂模式!小猪的奶茶店开
了也有一段时间了,吃货们对奶茶都很满意,更多的反馈是太单调
如果能搭配其他的小吃,比如手抓饼,咖喱鱼蛋啥的就更好了,
小猪通过自学学会了很多小吃制作方法,思考好久后,决定
升级小猪奶茶店,只是想增加新的小吃类,按照奶茶的套路,
又抽取做小吃的套路,再去请几个小弟专门负责做小吃显然
有些繁琐,而且要另外花钱,还不如让两个做奶茶的小弟都学
会做小吃,说多无益,开始升级小猪奶茶店!


升级小猪奶茶店 2.0

首先是产品类,我们有两个系列的产品,一个是饮料类,一个是小吃类

然后饮料有奶茶类果汁类,小吃有手抓饼类鱼蛋类

再接着我们把做做奶茶和做小吃的套路抽取成制作食物类

然后让两个小弟类来继承这个套路,比如让小弟1负责做奶茶和手抓饼,
小弟2负责做果汁和鱼丸:

东西都教好了,接着就开门做生意咯,现在的流程变成了这样:

如何让孩子爱上设计模式 —— 6.抽象工厂模式(Abstract Factory Pattern)_第1张图片

处理了四单,结果如下:

如何让孩子爱上设计模式 —— 6.抽象工厂模式(Abstract Factory Pattern)_第2张图片

好的,以上就是本节抽象工厂的代码示例!你可能会说:
!就这么简单?实际上就是这么简单,当然,看完这
个代码只是说明你理解了这个模式大概是怎样的,灵活
运用还需多多实现,栗子看懂了,替换成一些名词,
就不难理解了!


两个名词(产品等级结构与产品族)

产品等级结构(继承)

产品的继承结构,比如这里的抽象类是Drink(饮料),子类有
奶茶,果汁,然后抽象饮料与具体饮料构成了一个产品等级
结构,抽象饮料是父类,具体饮料是其子类。

产品族

同一工厂生产的,位于不同产品等级结构一组产品,比如这里
的奶茶和果汁属于饮料结构的一组产品,而手抓饼和鱼蛋则
属于小吃结构的一组产品。


UML类图

如何让孩子爱上设计模式 —— 6.抽象工厂模式(Abstract Factory Pattern)_第3张图片

如图所示,抽象工厂模式就是由四个角色组成:

  • 抽象工厂:声明一组用于创建产品族的方法,每个方法对应一种产品;
  • 具体工厂:实现抽象工厂创建产品的方法,生成具体产品;
  • 抽象产品:为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法;
  • 具体产品:抽象产品的具体化,实现抽象产品的相关方法;

使用场景与优缺点

使用场景

创建的对象有多个相互关联或依赖的产品族

优点

  • 1.隔离具体类的生成,客户端无需知道怎么被创建,接口与实现分离
  • 2.增加新的产品族很方便,无须修改已有系统,符合"开闭原则"

缺点

  • 1.类文件增加
  • 2.扩展新的产品等级结构麻烦,需要修改抽象工厂,实现抽象工厂的
    具体工厂类都要更改!

本节代码

https://github.com/coder-pig/DesignPatternsExample/tree/master/5.Abstract%20Factory%20Pattern


你可能感兴趣的:(如何让孩子爱上设计模式 —— 6.抽象工厂模式(Abstract Factory Pattern))