抽象工厂对产品等级的拓展(求大神指点)
2017-03-12 11:20
239 查看
写这篇文章是因为在csdn上看到刘伟老师写的一篇抽象工厂的文章,文章链接在这里:http://blog.csdn.net/lovelion/article/details/9319423。
有关于工厂模式我就不重复了,刘老师那里写的很详细。
最后面有一个问题,就是抽象工厂是否符合开闭原则,在产品族和产品等级两个方面去思考,我没有查看文献,只是按照自己的理解来回答这个问题。
在产品族方面,抽象工厂是支持开闭原则的,因为增加一个产品族,本质上就是增加一个新的抽象工厂的实现类而已,但是如果要增加一个产品等级,那么就不符合开闭原则了,因为你必须在抽象工厂里面再添加一个新的方法。
以电视机和洗衣机为例,有两家工厂生产这个产品族,一家是A公司,一家是B公司,如果要增加一个产品族,再去实现一个C公司就好了。
可是如果要增加一个空调,那么抽象工厂方法就需要改变,增加一个生产空调的方法,对应着实现了抽象工厂方法的实体类也要重写增加空调的方法。
那么如何解决这个问题,我思考的是代码肯定要动,只是在哪里动而已。我想的方法是增加一个工厂管理的接口,让抽象工厂类去继承这个工厂管理的接口,增加一个新的产品等级就在工厂管理里面处理。
![](https://img-blog.csdn.net/20170312113247499?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc0NDcwMTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170312113411273?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc0NDcwMTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170312113438438?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc0NDcwMTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170312113454805?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc0NDcwMTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在工厂管理里面增加或者删除对应的产品等级,然后让工厂的实现类重写里面的方法就可以做到对产品等级的拓展。
第一次写文章,排版思路都很乱,还望理解。
有关于工厂模式我就不重复了,刘老师那里写的很详细。
最后面有一个问题,就是抽象工厂是否符合开闭原则,在产品族和产品等级两个方面去思考,我没有查看文献,只是按照自己的理解来回答这个问题。
在产品族方面,抽象工厂是支持开闭原则的,因为增加一个产品族,本质上就是增加一个新的抽象工厂的实现类而已,但是如果要增加一个产品等级,那么就不符合开闭原则了,因为你必须在抽象工厂里面再添加一个新的方法。
以电视机和洗衣机为例,有两家工厂生产这个产品族,一家是A公司,一家是B公司,如果要增加一个产品族,再去实现一个C公司就好了。
可是如果要增加一个空调,那么抽象工厂方法就需要改变,增加一个生产空调的方法,对应着实现了抽象工厂方法的实体类也要重写增加空调的方法。
那么如何解决这个问题,我思考的是代码肯定要动,只是在哪里动而已。我想的方法是增加一个工厂管理的接口,让抽象工厂类去继承这个工厂管理的接口,增加一个新的产品等级就在工厂管理里面处理。
在工厂管理里面增加或者删除对应的产品等级,然后让工厂的实现类重写里面的方法就可以做到对产品等级的拓展。
第一次写文章,排版思路都很乱,还望理解。
相关文章推荐
- 分享 JSP学习笔记 望各大神指点不足
- Android 3D图形的手势旋转(未完成,求大神指点)
- sqlserver中char转化为varchar出现的问题-请数据库大神指点一二
- 我的第一个安卓小工具-计算器 希望各路大神指点!!正文是java源代码
- 急急急,求各位大神指点指点这错误怎么产生的com.good.vo.good.setGood_NAME(java.lang.String)
- Javaweb项目build报错 求大神指点
- cewolf+jfreechart怎样解 8b19 决报表中文显示方块问题,请大神指点
- 小白求大神门指点一下我在运行vs2017时出现这个提示是为什么呀,怎么解决这个问题呢?
- 2016-9-21 搜狐技术类 笔试 2道编程题 又g了,求大神指点!
- Android6.0编译报错求大神指点
- Android VideoView加载网络视频过程中退出页面,出现程序无响应 希望来大神指点一二
- 安卓开发初学者 在学习异步加载时遇到了问题 望大神指点
- 小白分享学习成果,大神勿喷。用bootstrap做的,引用就不再多说了,哪里写的不好,您多指点
- tomact启动错误求大神指点
- 微信小程序如何与java后台交互,获取json数据显示到页面,求大神指点
- JAVA中service实现类中的@Service(demoService)是什么意思? 求哪位大神指点
- windows 编译redis-3.0源码 Win32_Interop 工程报错 怎么解决 请大神帮忙指点
- /*输出100以内所有还7或7的倍数*\此程序在if那里有点繁琐,请大神指点一下,谢谢
- 谷歌大神Jeff Dean亲口讲述团队工作: 我们是如何用一项技术打造出数十种产品的