设计模式——设计模式概述

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式主要是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。

1.设计模式由来

软件设计模式源自于建筑学。积淀了几千年的建筑学工程总结出一系列值得工程领域(包括软件工程领域)借鉴和学习的经验。哈佛大学建筑学博士、美国加州大学伯克利分校建筑学教授Christopher Alexander博士及其研究团队,经过对住宅和城市环境大量的调查研究,发现大众对住宅和城市环境存在部分共同的认同规律。Christopher Alexander在著作《A Pattern Language: Towns, Buildings, Construction》中把这些认同规律归纳为253个模式,对每一个模式(Pattern)都从Context(前提条件)、Theme或Problem(目标问题)、 Solution(解决方案)三个方面进行了描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。在他的经典著作《建筑的永恒之道》中,他给出了关于模式的定义:

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

总结而言,即本文第一段的黑体字: 设计模式主要是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案。

1991年,四人组GoF(Gang of Four,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides)最早将模式应用于软件工程方法学,他们归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟,由此,软件设计模式诞生了!

设计模式一般包含模式名称、问题、目的、解决方案、效果等要素:

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

设计模式——设计模式概述_第1张图片

2.设计模式作用和分类

从上述设计模式的定义可以初步看出设计模式的作用,即:

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

  • 设计模式是从许多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,可避免重复性工作
  • 设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发人员之间沟通,使得设计方案更加通俗易懂
  • 大部分设计模式兼顾了系统的可重用性和可扩展性,这使得我们可以更好地重用一些已有的设计方案、功能模块甚至一个完整的软件系统,避免我们经常做一些重复的设计、编写一些重复的代码
  • 有助于初学者更加深入地理解面向对象思想

狭义的设计模式一般分为3大类共计23种(广义上说,随着软件技术的逐步发展,不断有新的设计模式被总结出来并应用到工程实践中),如下表。其中,创建型模式关注对象的创建过程,结构性模式关注如何将现有类或对象组织在一起形成更加强大的结构,行为型模式关注系统中对象之间的交互研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责

设计模式分类
类型 种类
创建型模式 单例模式,简单工厂模式,抽象工厂模式,工厂方法模式,原型模式,建造者模式
结构型模式 适配器模式,桥接模式,组合模式,装饰模式,外观模式,享元模式,代理模式
行为型模式 职责链模式,命令模式,解释器模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,策略模式,模板方法模式,访问者模式

在接下来的系列文章中,Jungle将详细介绍各种设计模式。欢迎关注!


3.设计模式的优点

设计模式是从众多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,使用这些方案将避免一些重复性工作,高效设计出高质量的软件系统。总的来说,设计模式主要有以下优点:

  • 设计模式融合了众多专家的经验,以一种标准的形式供广大开发人员使用,通俗的设计词汇和通用的语言方便开发人员交流和学习;
  • 设计模式使人们可以更简单方便地复用成功的设计,使新开发者更容易理解设计思路;
  • 设计模式使设计方案更加灵活、易于修改;
  • 设计模式的使用将提高软件系统的开发效率和软件质量,节约开发成本;
  • 设计模式有助于初学者深入理解面向对象思想。

 

欢迎关注知乎专栏:Jungle是一个用Qt的工业Robot

欢迎关注Jungle的微信公众号:Jungle笔记

设计模式——设计模式概述_第2张图片

你可能感兴趣的:(C++设计模式)