设计模式简介

在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。

设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类别或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。

并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其他非设计模式的模式,如架构模式。同时,算法不能算是一种设计模式,因为算法主要是用来解决计算上的问题,而非设计上的问题。

历史发展:
肯特·贝克和沃德·坎宁安在1987年,利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接口(GUI)的生成中。一年后埃里希·伽玛在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。与此同时James Coplien 在1989年至1991年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作Advanced C++ Programming Styles and Idioms。同年Erich Gamma 得到了博士学位,然后去了美国,在那与Richard Helm, Ralph Johnson ,John Vlissides 合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns - Elements of Reusable Object-Oriented Software) 一书,在此书中共收录了 23 种设计模式

这四位作者在软件开发领域里以“四人帮”(英语,Gang of Four,简称GoF)而闻名,并且他们在此书中的协作导致了软件设计模式的突破。有时,GoF也会用于代指《设计模式》这本书。

表述一个软件设计模式的格式根据作者的不同,划分和名称等都会有所不同。常用的GoF描述模式的格式大致分为以下这些部分:

  • 模式名:每一个模式都有自己的名字,模式的名字使得我们可以讨论我们的设计。
  • 问题:在面向对象的系统设计过程中反复出现的特定场合,它导致我们采用某个模式。
  • 解决方案:上述问题的解决方案,其内容给出了设计的各个组成部分,它们之间的关系、职责划分和协作方式。
  • 别名:一个模式可以有超过一个以上的名称。这些名称应该要在这一节注明。
  • 动机:在哪种情况使用该模式,是本节提供的方案(包括问题与来龙去脉)的责任。
  • 适用性:模式适用于哪些情况、模式的背景等等。
  • 结构:这部分常用类图与交互图阐述此模式。
  • 参与者:这部分提供一份本模式用到的类与对象清单,与它们在设计下扮演的角色。
  • 合作:描述在此模式下,类与对象间的交互。
  • 影响:采用该模式对软件系统其他部分的影响,比如对系统的扩充性、可移植性的影响。影响也包括负面的影响。这部分应描述使用本模式后的结果、副作用、与权衡(trade-off)
  • 实现:这部分应描述实现该模式、该模式的部分方案、实现该模式的可能技术、或者建议实现模式的方法。
  • 示例:简略描绘出如何以编程语言来使用模式。
  • 已知应用:业界已知的实现示例。
  • 相关模式:这部分包括其他相关模式,以及与其他类似模式的不同。

《设计模式》一书原先把设计模式分为创建型模式、结构型模式、行为型模式,把它们通过授权、聚合、诊断的概念来描述。

软件设计七大原则

开闭原则

对扩展开放,对修改关闭

依赖倒置原则

通过抽象使各个类或者模块不相互影响,实现松耦合

单一职责原则

一个类、接口、方法只做一件事

接口隔离原则

尽量保证接口的纯洁性,客户端不应该依赖不需要的接口

迪米特原则

又叫最少知道原则,一个类对其所依赖的类知道得越少越好

里氏替换原则

子类可以扩展父类的功能但不能改变父类原有的功能

合成复用原则

尽量使用对象组合、聚合,而不使用继承关系达到代码复用的目的

创建型模式

工厂方法模式(Factory Pattern)、抽象工厂模式(Abstract Factory Pattern)、单例模式(Singleton Pattern)、建造者模式(Builder Pattern)、原型模式(Prototype Pattern)

结构型模式

适配器模式(Adapter Pattern)、装饰器模式(Decorator Pattern)、代理模式(Proxy Pattern)、外观模式(Facade Pattern)、桥接模式(Bridge Pattern)、组合模式(Composite Pattern)、享元模式(Flyweight Pattern)

行为型模式

策略模式(Strategt Pattern)、模板方法模式(Template Pattern)、观察者模式(Observer Pattern)、迭代子模式(Iterative Pattern)、责任链模式(Chain of Responsibility Pattern)、命令模式(Command Pattern)、备忘录模式(Memo Pattern)、状态模式(State Pattern)、访问者模式(Visitor Pattern)、中介者模式(Mediator Pattern)、解释器模式(Interpreter Pattern)

你可能感兴趣的:(设计模式简介)