设计模式更多的是一种思想,落实到具体实现上,不同的语言会根据其自身特性有着不同的实现方式,
这也是能感受到语言之间的一些差异的有意思地方吧~
1. 起源
模式起源于建筑领域,模式之父 Christopher Alexander(克里斯托弗.亚历山大)在他的经典著作《建筑的永恒之道》中,
他给出了关于模式的定义:
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。
1991年,四人组GoF(Gang of Four,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides)最早将模式应用于软件工程方法学.
在1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。
2. 设计模式 在 软件中的应用 & 存在的意义:
软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等.
实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。
设计模式(Design Pattern)的定义:
是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。
设计模式要干的事情就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的行为代码解耦。
3. 设计模式包括啥:
狭义的设计模式一般分为3大类共计23种(也就是GoF在《设计模式:可复用面向对象软件的基础》一书中所介绍的23种经典设计模式)。
根据它们的用途,设计模式可分为 创建型(Creational),结构型(Structural) 、行为型(Behavioral) 三类 :
- 建型模式:主要用于描述如何创建对象
- 结构型模式:主要用于描述如何实现类或对象的组合
- 行为型模式:主要用于描述类或对象怎样交互以及怎样分配职责
4. 针对每种设计模式的思考:
对于软件的每个模式,都要问自己这4个问题:
(1)问题描述【待解决的问题是什么】
(2)前提条件【在何种环境或约束条件下使用】
(3)解法【如何解决,关键代码实现是什么(C++和Java)】
(4)效果【有哪些优缺点,使用时要注意什么】