第3章 模式
何谓模式
每个模式都是一个由 3 部分组成的规则,它表达的是某一环境、一个问题以及解决问题的方案之间的关系。
- 某一环境
- 此环境中反复出现的某个因素系统
- 使这些因素能够自我协调的某种空间配置
模式是存在于世界中的事物,同时也是告诉我们如何创造这个事物,以及何时必须创造它的规则。
它既是过程,又是事物;既描述了有活力的事物,又描述了产生事物的过程。
模式痴迷
所谓模式痴迷,就是指某人对模式过于痴迷,以至于无法不在代码中使用模式。
在学习模式的道路上,避免模式痴迷也许是不可能的。真正的模式之乐,来自睿智地使用模式。
重构使我们的注意力集中在去除重复、简化代码和使代码清晰表达意图上,当模式通过重构演进到系统之中时,模式过度设计的机会将很小。
实现模式的方式不止一种
实现一个模式有许多种方式。模式实现要匹配当前需求,而不是徒有模式的结构。
模式实现中采取最精简的形式也是演进设计实践的一部分。
通过重构实现、趋向和去除模式
重构的目的始终是得到更好的设计,而不是为了实现模式本身。
模式导向的重构所采取的方向经常受到模式本质的影响。
在重构实现或者趋向一个模式后,必须评估设计是否确实得到了改善。如果没有,最好返回或者向另一个方向重构,比如重构去除模式或者重构实现另一个模式。
模式是否会使代码更加复杂
通常而言,实现模式应该有助于去除重复代码、简化逻辑、说明意图和提高灵活性。
但是,人们对模式的熟悉程度对于他们如何看待基于模式的重构将起决定性作用。
模式知识
如果你不懂模式,就很难演进出优秀的设计。模式凝聚了前人的智慧。重用这种智慧是极为有益的。
但仅仅具备模式知识还不足以演进出优秀的软件,你还必须懂的明智地使用模式。
使用模式的预先设计(Design up-front)
在洽谈一个项目时,如果不先构思出设计,然后详细地向客户阐述清楚的话,我们根本得不到这个项目的合同。这种情况下,大规模的预先设计是至关重要的。
大规模预先设计的典型问题在于,它经常会浪费时间。
需要非常谨慎地采用使用模式的预先设计,多数情况下会使用演进系统。