美文网首页首页投稿(暂停使用,暂停投稿)架构算法设计模式和编程理论程序员
如何让孩子爱上设计模式 —— 6.抽象工厂模式(Abstract

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

作者: coder_pig | 来源:发表于2017-01-19 11:47 被阅读76次

    标签: 设计模式初涉


    描述性文字

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


    升级小猪奶茶店 2.0

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

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

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

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

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

    处理了四单,结果如下:

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


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

    产品等级结构(继承)

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

    产品族

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


    UML类图

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

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

    使用场景与优缺点

    使用场景

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

    优点

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

    缺点

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

    本节代码

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


    相关文章

      网友评论

        本文标题:如何让孩子爱上设计模式 —— 6.抽象工厂模式(Abstract

        本文链接:https://www.haomeiwen.com/subject/ezkibttx.html