在前几篇文章中,我们回答了一些根本性的问题。
我们学到了:为什么设计模式存在,为什么它们不是可再使用的代码,为什么经验丰富的工程师会识别出模式而不是记忆.
现在,我们准备好 一个重要的转变。
从此开始学习个人设计模式.
在我们这样做之前,有一个技能,可以使每一个未来的模式都更容易理解.
每个设计模式可以通过回答相同的四个问题来理解.
一旦你学会了这四个问题, 你不必单独记住规律。
相反,你会知道如何阅读任何图案描述, 无论是从一本书,文档,还是采访问题。
为何Beginners Find Design Pattles Overwhiming 想象首次打开了"设计图案"一书.
你可以看到一些术语,比如: Singleton Factory 方法适应器策略观察者代理访问者 每一章看起来都不同.
每个UML图看起来都不同.
每个例子都使用不同的类.
感觉你正在学习23个无关的概念 这是因为大多数初学者都专注于执行.
经验丰富的工程师把注意力集中在简单得多的东西上.
他们每次都问同样的四个问题。
每个设计模式背后的四个问题 每次遇到新的设计模式时,请自问: 这四个问题对应于每个设计模式的四个基本部分: 问题有意解决的后果 各各明说.
1.
问题——为什么这种模式存在?
每个设计模式都从一个问题开始.
不是生意问题 一个设计问题。
例如:对象创建变得复杂了.
不同的算法不断改变.
部件紧密地结合在一起。
外部系统有不相容的接口.
新的特性需要修改现有的类别。
注意重要的东西 模式没有出现,因为有人想发明出一个聪明的设计.
出现的原因是软件团队反复面临同样的工程挑战.
每当你研究一种新的模式时,你的第一个问题是:是什么反复出现的设计问题使得这种模式是必要的?
如果你跳过这个步骤,图案就变成了记忆而非理解的东西.
2.
意图——模式试图实现什么?
一旦问题清楚,下一个问题是: 总体目标是什么?
这被称为图案的意向.
以为一刑之用.
例如:简化对象创建,单独改变行为,允许不相容的系统一起工作,减少耦合,动态地增加功能.
意图并不能解释执行.
它只是告诉你 模式正在试图实现。
思考这个问题的一个有用方法是:3.
解决办法——模式如何解决问题?
直到现在,我们才问:模式如何真正解决问题?
这是许多初学者跳到第一位的部分。
他们立即开始研究UML图和代码.
经验丰富的工程师则相反.
一旦他们理解问题和意图,解决方案就更容易被理解.
解决方案通常描述:参与对象,他们的责任,他们如何合作,设计如何组织.
注意解决方案不是代码模板 。
不同的编程语言将不同地执行相同的模式.
重要的部分是基础设计理念.
4.
后果——我们获得什么,我们牺牲什么?
每个工程决策都涉及取舍.
设计模式也不例外。
一个模式通常在引入另一个考虑的同时解决一个问题.
例如:增加类,增加抽象,增加复杂性,增加间接性,提高灵活性.
经验丰富的工程师从不问:"这个模式好么?
相反,他们问:"这种取舍对于我的系统来说是值得的吗?" 所以"后果"一节与"解决"一节同等重要.
忽视贸易