为什么我们需要模式?直截了当的答案是我们不想重新发明轮子!
什么是模式
:
模式
。为什么要使用设计模式?
1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。
他们所提出的设计模式主要是基于以下的面向对象设计原则:
下面是一个示例,让我们更深刻地了解什么是设计模式以及如何应用它们。 接下来的文章中我们来做一下有意思的大工程吧,运用代码来创建一架飞机!
首先我们要创建飞机的类,名字为 Aircraft,然后要创建相应的构造函数。类构造函数是面向对象语言中的基本概念之一。构造函数帮助创建类的对象,并可以接受参数。
1 | class Aircraft { |
在上面的示例中,我们为该类提供了默认构造函数,该构造函数接受飞机的单个参数type 。结果过了几天后,你意识到你还要向Aircraf类添加其他属性。我们就假设你要添加的新属性是飞机的颜色,但是你之前已经发布了一个版本的库,并且无法在库中修改原始构造函数。因为库已经发布给用户了,很多用户说不定都已经用上了,所以不能够改已经发布的库的函数接口。那么该怎么办呢?
解决方案是添加另一个具有两个参数的构造函数(也就是我们新加入一个拥有不同接口的构造函数),如下所示:
1 | class Aircraft { |
假如又过了几天,你又有新的属性要添加到飞机这个类中。
如果继续上面这种方式,你将最终得到一堆构造函数,其中的函数参数越来越像折叠望远镜,我们就把这种办法称作为折叠构造函数模式(telescoping constructor pattern )
吧:
1 | Aircraft(string type) |
The telescoping pattern
is called an anti-pattern: how NOT to do things! //伸缩模式称为反模式:也就是如何对发布的库不做修改!
很明显,使用折叠构造函数模式来处理这种属性变量越来越多的类是极为不便的,那么,我们该采取何种方法呢?
实际上处理变量越来越多的类的方法是使用
建造者模式(Builder Pattern)
,我们将在接下来的文章中深入讨论。
急于要接受即将面试的课程的人们,建议您遍历所有的创建型模式,装饰器,代理,迭代器,观察者和访客模式。
设计模式的分类:
创建型模式
:新创建的对象听起来可能很琐碎,但在创建对象实例时随便乱扔代码绝对会让你日后头痛。创新的设计模式提供了有关如何最好地将对象创建过程封装到程序中的有力建议。、
结构型模式
:与类的组成有关,即类的构成或构造方式。
行为设计模式
:规定了类和对象之间的交互以及责任的委派。
- Separate out parts of code that vary or change from those that remain the same. //将保持不变的部分和经常变化的部分分开。
- Always code to an interface and not against a concrete implementation. //针对接口编码,不要针对具体实现编码。
- Encapsulate behaviors as much as possible. //尽可能对行为进行封装
- Favor composition over inheritance. Inheritance can result in explosion of classes and also sometimes the base class is fitted with new functionality that isn’t applicable to some of its derived classes.//优先考虑组成而不是继承。继承会导致类的爆炸式增长,并且有时基类还配备了不适用于其某些派生类的新功能。
- Interacting components within a system should be as loosely coupled as possible. //系统内的交互组件应尽可能松散地耦合。
- Ideally, class design should inhibit modification and encourage extension. //理想情况下,类应该禁止修改并鼓励扩展。
- Using patterns in your day to day work, allows exchanging entire implementation concepts with other developers via shared pattern vocabulary.//通过运用设计模式词汇和其他人交换设计思路
接下来我们说明的大多数设计模式,都是围绕着构建我们的飞机来的,不得不说是个大工程啊(从零开始造飞机!),开始我们的设计模式之旅吧!
设计模式总结
Software Design Patterns: Best Practices for Software Developers /github educative
Update your browser to view this website correctly. Update my browser now