设计模式的大千世界—23种模式

来源:互联网 发布:windows内核启动过程 编辑:程序博客网 时间:2024/06/06 02:34

前言

 小编最近接触到了设计模式的学习内容,通过《大话设计模式》这本书,小菜和大鸟的风趣对话,认识到了各种各样的生活、工作中的事情,是如何巧妙地转化成设计模式的,下面,小编从整体的角度,对二十三种设计模式进行了以下总结:

什么是设计模式

一、基本理解

(1)每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。

(2)设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总
结。


二、作用

(1)使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性;

(2)设计模式使代码编写真正工程化;

(3)设计模式是软件工程的基石脉络,如同大厦的结构一样。

三、四要素

(1)模式名称(pattern name)

 一个助记名,它用以两个词来描述模式的问题、解决方案和效果。

(2)问题(problem)

 描述了应该在何时使用模式。


(3)解决方案(solution)

 描述了设计的组成成分,他们之间的相互关系及各自的职责和协助方式。

(4)效果(consequendes)

 描述了应用的效果及使用模式应权衡的问题。

设计模式的分类

一、两条准则

1.目的准则

(1)模式是用来完成什么工作的。

(2)模式依据其目的可分为创建型( Creational)、结构型( Structural)、或行为型( Behavioral )三种。

创建型模式与对象的创建有关;

结构型模式处理类或对象的组合;

行为型模式对类或对象怎样交互和怎样分配职责进行描述。


2.范围准则

(1)指定模式主要是用于类还是用于对象。

(2)类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。

     对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。

从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处 理类间关系的模式,而
大部分模式都属于对象模式的范畴。


二、具体划分



1.创建型(creational):创建性模式与对象的创建有关

(1)工厂方法模式 (factory method)

  定义一个用于创建对象的接口,让子类决定将那一个类实例化。工厂方法使一个类的实例化延迟到它的子方法。

(2)抽象工厂模式 (abstract factory)

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

(3)创建者模式 (builder)

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

(4)原型模式 (prototype)

 指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
(5)单例模式 (singleton)

 保证一个类仅有一个示例,并且提供一个访问它的全局访问点。

2.结构型(structural):结构型模式处理类或对象的组合

(1)适配器模式 (adapter)

  将一个类的接口转换成客户希望的另外一个接口。adapter模式使得原本由于接口不兼容而不能能一起工作的那些类可以一起工作。
(2)桥接模式 (bridge)

  将抽象部分与它的实现部分分离,使他们可以独立地变化。
(3)组合模式 (composite)

  将对象组合成树形结构以表示“整体-部分”的层次结构。composite使得客户对单个对象和复合对象的使用具有一致性。
(4)装饰模式 (decorator)

  动态地给一个对象添加一些额外的职责。就扩展功能而言,decorator模式比生成子类方式更为灵活。
(5)外观模式 (facade)

  为子系统中的一组接口提供一个一致的界面,facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
(6)享元模式 (flyweight)

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

(7)代理模式 (proxy)
  为其他对象提供一个代理以控制对这个对象的访问。

       

3.行为型(behavioral):行为型模式对类或对象怎样交互和怎样分配职责进行描述


  (1)解释器模式 (interpreter)

  给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
  (2)模版方法模式(template method)

  定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。template method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  (3)命令模式 (command)

  将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或纪录请求日志,以及支持可取消的操作。
  (4)迭代器模式 (iterator)

  提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
  (5)中介者模式 (mediator)

  用一个中介对象来封装一系列的对象交互。中介者使各对象不需要现实的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。

  (6)观察者模式 (observer)

  定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖与它的对象都得到通知并自动刷新。
  (7)状态模式 (state)

  允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

  (8)策略模式 (stategy)

  定义一系列的算法,把他们一个个封装起来,并且使他们可以互相替换。本模式使得算法的变化可以独立于使用它的客户。
  (9)访问者模式 (visitor)

  表示将一个作用与某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
  (10)备忘模式 (memento)

  在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到保存的状态。
  (11)职责链模式 (chain of responsibility)

  为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。


六大原则


1、开放封闭原则(Open Close Principle)

对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。
简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类


2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则是面向对象设计的基本原则之一,是对开放封闭原则的补充。 

任何基类可以出现的地方,子类一定可以出现。

实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是

对实现抽象的具体步骤的规范。


3、依赖倒转原则(Dependence Inversion Principle)

这个原则是开闭原则的基础,具体内容:针对对接口编程,依赖于抽象而不依赖于具体。


4、接口隔离原则(Interface Segregation Principle)

使用多个隔离的接口,比使用单个接口要好。

它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级
和维护的软件设计思想,它强调降低依赖,降低耦合


5、迪米特法则,又称最少知道原则(Demeter Principle)

一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立


6、合成复用原则(Composite Reuse Principle)

尽量使用合成/聚合的方式,而不是使用继承。


小结

 了解的不是很具体,接下来小编将会对于这方面涉及到的内容做进一步的总结。

 敬请期待下文!



0 0
原创粉丝点击