设计模式

什么是设计模式?

设计模式是一套被反复使用的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重复使用代码,让代码更容易被他人理解并且提高代码的可靠性。

可以说设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用。

基本要素
名称

模式名称是用来反映描述模式的问题,解决方案和效果,方便开发人员之间的交流与更好的理解设计模式,大多数设计模式都是根据功能来命名的,如xxxFactory。

问题

描述了应该在何时使用模式,包含了原始设计中存在的问题以及问题存在的原因。

解决方案

描述了设计模式的组成部分,以及这些组成部分之间的相互关系,各自的职责和协作方式。

效果

描述了设计模式的应用情况以及在使用模式时应该权衡的问题,包含设计模式的优缺点。没有任何一个解决方案是完美的,因此在选择设计模式的时候需要进行合理的选择。

设计模式的分类

可以根据目的(用来做什么的)分类,将模式分为:创建型、结构型、行为型。也可以根据范围(处理类之间的关系还是处理对象之间的关系)分类,将模式分为:类模式、对象模式,如下所示:
image.png

设计模式说明
抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

建造者模式

将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表示

工厂方法模式

定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式将一个类的实例化延迟到其子类

原型模式

使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象

单例模式

确保一个类只有一个实例,并提供一个全局访问点来访问该实例

适配器模式

将一个类的接口转换成客户希望的另一个接口,适配器模式让那些接口不兼容的类可以一起工作

桥接模式

将抽象部分与实现部分解耦,使得两者都能够独立变化

组合模式

组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式可以让客户端统一对待单个对象和组合对象

装饰模式

动态的给一个对象增加一些额外的职责,就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案

外观模式

为子系统中的一组接口提供统一的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

享元模式

运用共享技术有效地支持大量细粒度对象的复用

代理模式

给某一个对象提供一个代理或占位符,并由代理对象来控制原对象的访问

责任链模式

避免一个请求的发送者和接收者偶合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并沿着这条链传递请求,直到有一个对象能够处理它为止

命令模式

将一个请求封装成一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销操纵

解释器模式

给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子

迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示

中介者模式

定义一个对象来封装一系列对象的交互,中介者模式使各个对象之间不需要显示地相互引用,从而使其耦合松散,让你可以独立地改变它们之间的交互

备忘录模式

在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态

观察者模式

定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新

状态模式

允许一个对象在其内部状态改变时改变它的行为

策略模式

定义一系列算法,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法可以独立于使用它的客户变化

模板方法模式

定义一个操作中算法的框架,而将一些步骤延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构就可以重定义该算法的某些特定步骤

访问者模式

表示一个作用于某对象结构中的各个元素的操作,访问者模式让你可以在不改变各个元素的类的前提下定义作用于这下元素的新操作

设计模式的优点
  1. 融合了众多专家的经验,并以一种标准的形式给广大开发人员使用,提供通用的设计词汇和开发语言,方便开发人员交流。让设计方案更加通俗易懂,使不同编程语言的开发和设计人员可以通过设计模式来交流系统设计方案,设计模式可以降低开发人员理解系统的复杂度。
  2. 让开发人员可以更简单地复用成功的设计和体系结构,使得重用成功的设计更加容易,并避免导致不可重用的设计方案。
  3. 让设计方案更加灵活,易于修改。在很多设计模式中广泛使用了开闭原则、依赖倒置原则等面向对象设计原则,让系统有较好的可维护性,真正实现了可维护性的复用。在软件开发中合理使用设计模式,可以使系统中的一些组成部分在其它系统得到重用,而在此基础上进行二次开发自然方便得多。
  4. 设计模式是通过多次实践证明的有效解决方案,且通常是针对某一类问题的最佳设计方案,因此设计模式的使用提高软件系统的开发效率和软件质量,在一定程度上节约设计成本。
  5. 有助于开发人员更深入地理解面向对象思想,还可以提高开发人员的设计水平和代码质量。

文章来源: segmentfault.com,作者:DoubleJ,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000039352226

(完)