前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重温设计模式之抽象工厂

重温设计模式之抽象工厂

作者头像
the5fire
发布2019-02-28 15:31:52
3230
发布2019-02-28 15:31:52
举报
文章被收录于专栏:Python程序员杂谈

上篇复习了工厂方法模式的使用,对于创建单个系列产品来说,工厂方法已经可以很好的满足“开-闭”原则,但是对于组合产品,由多系列组成的产品,就显得力不从心了。

工厂模式中工厂类得特点是职责单一,这也是工厂方法的优点,每个类不必要关联多种事务。但这种单一的特点也限制了工厂方法的扩展,使得每一个具体的工厂只能创建单一的产品。如果我们需要创建多个产品,那就需要修改抽象工厂或者具体工厂中的代码了。

因此,我们引入抽象工厂方法。

相对于工厂方法来说,抽象工厂只是多了一系列产品,并且抽象工厂类中的方法也不是针对单一的产品,而是针对对应型号,或者叫产品族。

举一个最简单的例子:商家到自行车厂,要求生产两种自行车,永久牌和飞鸽牌。由此我们写出一个抽象工厂的小实例(我们假设自行车只是由车架和轮胎构成),结构图如下:

具体流程很简单,自行车厂先找到其两个子工厂:飞鸽自行车厂和永久自行车厂,让他们各自生产自己的产品。

相应的子自行车厂找到对应的零件生产厂商,购买对应的零件,然后组成自行车。

其实这个里面可以加入建造者模式,为了保持简洁,这里暂时不引入建造者模式。

代码比较多,以附件形式提供吧。

点我下载抽象工厂源码

由这个简单的例子可以看得出来,抽象工厂在创建一类产品时是具有优势的,有很好的扩展性,比如增加一个Specialized牌得,只需要添加两个产品类和一个工厂即可,不需要修代码。

另外对于商家来说,我只需要知道我要什么自行车就行,其他的不需要关心。

但是问题是如果要添加脚蹬子这个产品怎么办?这确实是抽象工厂的一个缺点。我想后面我们可以通过其他模式来解决。

PS:抽象工厂官方定义:抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-05-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档