设计模式之工厂模式(五)
前面几篇,我们已经把简单工厂、工厂方法模式以及抽象工厂模式一一进行了拆解,一步步让我们学会了这几个工厂模式,哦,对了,简单工厂并不算真正意义上的工厂。
我们通过吃披萨的启发,对创建披萨进行了改造;又发展了远景,对披萨加盟有了浓厚的兴趣,并开了很多加盟店;又对材料进行了严格把控,才有了现在的规模。工厂模式,就这样一层层地展现在我们面前。
首先,来看下上次遗留的抽象工厂模式的问题。抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或关心)实际产出的具体产品是什么。这样一来,客户就从具体的产品中被解耦。让我们看看类图来了解其中的关系。
这是一张相当复杂的类图:让我们从pizzastore的观点来看一看它:
工厂方法是不是潜伏在抽象工厂里面?
我们注意到,抽象工厂的每个方法实际上看起来都像工厂方法。每个方法能被声明称抽象,而子类的方法覆盖这些方法来创建某些对象。
所以,抽象工厂方法经常以工厂方法的方式实现,这很有道理,对吧?抽象工厂的任务是定一个负责创建一组产品的接口。这个接口内的每个方法负责创建一个具体产品,同时我们利用实现抽象工厂的子类来提供这些具体的做法。所以,在抽象工厂中利用工厂方法实现生产方法是相当自然的做法。
比较工厂方法和抽象工厂
因为书中用图描绘了对比的关系,小编力求同书本结合,故在此把书本中的类图贴出来,大家不要介意了。
设计箱内的工具
还是按照之前的套路,总结下工具箱内新增的工具吧
-
oo基础
抽象、封装、继承、多态
-
oo原则
封装变化
多用组合,少用继承
针对接口编程,不针对实现编程
为交互对象之间的松耦合设计而努力
依赖抽象,不要依赖具体类(我们有了一个新原则,知道我们尽可能地让事情保持抽象)
-
oo模式
『策略模式』、『观察者模式』、『装饰者模式』
『抽象工厂模式』提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
『工厂方法模式』定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类
结尾
很高兴,听过这么多的篇幅,大家能和我坚持学完。小编知道,针对这个工厂模式,写的不那么尽如人意。篇幅太多,描述不清,可能小编自己的想法加的也不够多,被书本牵着鼻子走了。
所以,针对工厂模式,包括后面更多的模式,小编还是会做下改变。之前说过小编会先总体理解一遍再进行编写,以后可能小编还得列一个大纲先,然后和大家一起学习,一起进步。
小编希望能看到更多的意见和建议,让这个系列写的更好。谢谢大家的支持
上一篇: 配置nodejs环境的方法
下一篇: Go语言strings包
推荐阅读
-
JavaScript设计模式精华摘抄(持续更新...)-考拉阅读前端团队-SegmentFault思否
-
《Head First 设计模式》代码之PHP版(面向对象学习)第1/2页
-
js 设计模式——状态模式
-
Java设计中的Builder模式的介绍
-
c#设计模式之单例模式的实现方式
-
23种GoF设计模式概述
-
React组件设计模式之组合组件应用实例分析
-
Mybaits 源码解析 (十一)----- 设计模式精妙使用:静态代理和动态代理结合使用:@MapperScan将Mapper接口生成代理注入到Spring
-
设计模式之单例模式(懒汉式单例、饿汉式单例、登记式单例)
-
Spring,SpringMvc,MyBatis用到的设计模式