标签:ima 算法族 之间 就会 inf 允许 工厂方法 开放 抽象
我们一般制造对象时,采用操作符new来进行创建。但是慢慢我们了解到实例化这个活动不应该总是公开地进行,同时初始化还经常造成“耦合”的问题。
如果我们不希望出现上述问题,那么我们就有必要认识一下“工厂模式”,它将有助于我们从复杂的依赖中解脱出来。
1)为什么说“new”不好?
当看到“new”,就会想到“具体”。
我们不应该总是针对实现编程,但是当我们每次使用new时,正是在针对实现编程而不是接口,这很不符合我们的期望。
当使用“new”时,我们的确是在实例化一个具体类,当代码绑着具体类会导致代码更脆弱,更缺乏弹性。
当看到这样的代码,一旦有变化或扩展,就必须重新打开这段代码进行检查和修改。通常这样修改过的代码将造成部分系统更难维护和更新,而且也更容易犯错。
针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。
2)我们现在建立一个拥有多种披萨类型的披萨店
通常,我们为了让系统有弹性,我们将各种类型的披萨都继承于一个抽象类或接口。(但是这样做会导致这些类或者接口无法直接实例化)
这么编程,我们就会承受一些压力,这些压力来自于增加或删除比萨类型
这时候,我们想到回到OO设计原则去寻找线索。我们发现这么一条“找出会变化的方面,把它们从不变的部分分离出来”。
那么,现在我们最好将创建对象移到orderPizza()之外,这就需要把创建披萨的代码移到另一个对象中,由这个对象专职创建披萨。
3)定义简单工厂
4)工厂方法模式
现在我们为上述我们建立的披萨店开设加盟店。
我们希望每个加盟店有自己独特的风味,但是为了保证品牌的一致性,虽然风味可以不同,但披萨的制作流程火候必须一致。
甚至我们可以上不想子类覆盖的方法orderPizza()声明成final。
开一家披萨店,举个例子。
实现一个独特风味的披萨,举个例子。
调用,测试一下。
5)依赖倒置原则
6)抽象工厂模式
7)小结
OO基础:
OO原则:
OO模式:
要点:
参考书目:《Head First 设计模式》
标签:ima 算法族 之间 就会 inf 允许 工厂方法 开放 抽象
原文地址:https://www.cnblogs.com/dudududu/p/9126073.html