看看前辈们如何总结的:
在软件世界中,每个开发机构就像一个部落,而模式就是对部落的某种共同记忆的一种表现。---Grady Booch,《J2EE核心模式》
模式便是特定环境下同类问题的一种解决方法 ---Gand of Four,《设计模式:可复用面向对象软件基础》
正如上面所暗示的,设计模式便是分析过的问题和问题解决方案所阐述的优秀实践。注意模式本质是自下而上的。它们来源于实践非空洞的理论。
一个模式的核心由4个部分组成:命名、问题、解决方案和效果。
命名非常重要。命名可以说丰富了程序员的语言,少许简短的文字便可表示相当复杂的问题和解决方案。命名必须兼顾简洁性和描述性。《设计模式》说道:找到一个好名字,成了我们在开发模式目录中最困难的部分之一。
Martin Flower 也赞同模式命名至关重要,因为模式的目的之一就是为开发者更加有效的交流提供词汇。
无论解决方案如何优雅,问题以及问题发生的环境都是一个模式的基础。找出问题比使用模式目录中的解决方案更难。
模式会小心谨慎地描述问题的空间(发生的条件和环境)。问题会被置于环境中简明扼要地描述。问题会被分解成不同的细节和各种表现。
解决方案最初和问题放在一起的。尽管代码有现成的,但是解决方案从来不是简单的复制哦,有可能实现上又上百种的细微差。
把一个比方:就像农作物播种操作,如果你盲目的遵循书本上的步骤,那么有可能到收货季节你有可能挨饿,以模式为基础,但又针 对各种情况随机应变的方案更加实用。虽然问题(农作物成长)的基本解决方案大致相同(播种、灌溉、收割),但是实际场景会有 各种因素,比如土壤类别、地理位置、土地方位、当地有害物等等。
在设计代码的时候,你所做的每一个决定都会带来不同的结果。当然我们总是希望得到令人满意的针对问题的解决方案。解决方案一旦部署,理想情况下它也许非常适合与其他模式一同工作。但是也要留心是否会带来风险。