简谈设计模式

设计模式的诞生与发展

  首先,我们需要明确的是设计模式起源于建筑业而非软件业。谈设计模式之前,我们先来看看模式是什么?说起模式,就不得不提“模式之父”Christopher Alexander(克里斯托弗.亚历山大),他的团队用了约20年的时间,对住宅和周边环境进行了大量的调查研究和资料收集工作,发现人们对舒适住宅和城市环境存在一些共同的认同规律,Christopher Alexander在著作A Pattern Language: Towns, Buildings, Construction中把这些认同规律归纳为253个模式,对每一个模式(Pattern)都从Context(前提条件)、Theme或Problem(目标问题)、 Solution(解决方案)三个方面进行了描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。

  Alexander给出了给出了关于模式的经典定义:每个模式都描述了一个在我们的环境中不断出现问题 然后描述了该问题的解决方案的核心,通过这种方式我们可以无数次地重用那些已有的解决方案,需再复相同的工作。

  1990年,软件工程界开始关注Christopher Alexander等在这一住宅、公共建筑与城市规划领域的重大突破。“四人组(Gang of Four,GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)” ,他们在1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。GoF将模式的概念引入软件工程领域,这标志着软件模式的诞生。软件模式(Software Patterns)是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。

  在软件模式中,设计模式是研究最为深入的分支,设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案,它融合了众多专家的设计经验,已经在成千上万的软件中得以应用。 1995年, GoF将收集和整理好的23种设计模式汇编成Design Patterns: Elements of Reusable Object-Oriented Software【《设计模式:可复用面向对象软件的基础》】一书,该书的出版也标志着设计模式正式成为面向对象(Object Oriented)软件工程的一个重要研究分支。

设计模式的定义与分类

   设计模式的一般定义如下:

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。

   设计模式一般包含模式名称、问题、目的、解决方案、效果等组成要素,其中关键要素是模式名称、问题、解决方案和效果。模式名称(Pattern Name)通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流,绝大多数模式都是根据其功能或模式结构来命名的(GoF设计模式中没有一个模式用人名命名);问题(Problem)描述了应该在何时使用模式,它包含了设计中存在的问题以及问题存在的原因;解决方案(Solution)描述了一个设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码来进行描述;效果(Consequences)描述了模式的优缺点以及在使用模式时应权衡的问题。

  常见的设计模式分类如下:

GoF设计模式简介

  1.根据目的准则分:

  创建型模式:是创建对象而不是直接实例化对象(new),使程序在判断给定情况下创建哪一个对象时更为灵活。
  结构型模式:怎样安排系统内的各个对象,使其分布合理、易于理解、管理和维护。
  行为型模式:定义系统内对象间的交互和通信。

  2.根据作用范围分:

  类模式:处理类和子类之间的关系(静态)
  对象模式:处理对象之间的关系,在运行时可以变化(动态)

  具体可以如下:

设计模式的作用

   1.设计模式能让专业人之间交流方便,如下:

  程序员A:这里我用了XXX设计模式

  程序员B:那我大致了解你程序的设计思路了

  2.代码复用,思路复用

  3.设计模式是编程经验的总结

  4.降低耦合度,增加灵活性

  5。。。。。

参考链接

[1]https://blog.csdn.net/lovelion/article/details/7420863

[2]https://www.runoob.com/design-pattern/design-pattern-intro.html

[3]https://zh.wikipedia.org/wiki/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F_(%E8%AE%A1%E7%AE%97%E6%9C%BA)#%E7%99%BC%E5%B1%95%E6%AD%B7%E5%8F%B2

[4]https://www.cnblogs.com/linkstar/p/7859980.html

 

猜你喜欢

转载自www.cnblogs.com/wangke0825/p/12459245.html