中介者模式

中介者模式

一、什么是中介者模式?

中介者模式(Mediator Design Pattern):定义一个单独的(中介)对象,来封装一系列对象的交互。将这组对象之间的交互都委派给中介对象,来避免对象之间的直接交互。

英文原文:

Mediator pattern defines a separate (mediator) object that encapsulates the interaction between a set of objects and the objects delegate their interaction to a mediator object instead of interacting with each other directly.

它有几个特点:

  • 一组对象之间存在相互交流的情况,也就是一种网状关系
  • 定义一个上帝(中介)对象,负责中转对象之间的交互,来避免对象之间的直接联系
  • 相当于加了个中间层转换,把网状关系变成了星型关系

中介者模式,也称为调停模式,负责多个对象之间的互相沟通。

 备忘录模式

备忘录模式

一、什么是备忘录模式?

备忘录模式(Memento Desidn Pattern):在不违背封装性原则的前提下,捕获一个对象的内部状态,并在对象之外保存,以便之后恢复对象为先前的状态。

它的几个特点是:

  • 要求不要违背封装性原则
  • 保存的是对象的内部状态,意味着对象外部不应该对保存的数据进行操作,而是假设不知道它的数据结构
  • 保存的数据,相当于快照,可以用于撤销恢复

备忘录模式,也称为快照模式。

 迭代器模式

迭代器模式

一、什么是迭代器模式?

迭代器模式(Iterator Design Pattern):提供一种方式来访问聚合里面的所有元素,而不暴露聚合对象的内部数据结构。

迭代器模式,也称为游标模式,主要用于遍历数据集合。

迭代器模式的几个特点:

  • 目的是为了遍历集合数据
  • 特点是可以避免集合的内部数据结构暴露,增加集合内部实现的灵活性

迭代器是为了遍历集合数据,所以一个完整的迭代器,肯定是包括集合和迭代器2部分。

 职责链模式

职责链模式

一、职责链模式是什么?

职责链模式(Chain of Responsibility Design Pattern):将请求的发送和接收解耦,让多个接收者都有机会处理这个请求。将接收者串联起来,并沿着接收者链传递请求,直到某个接收者能够处理它为止。

英语原文:

Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.

职责链的几个特点:

  • 存在多个接收者可以处理请求
  • 请求只需被某个接收者处理即可
  • 请求也可以被多个接收者处理

职责链的目的在于,找到一个可以处理请求的接收者就好了。

 策略模式

策略模式

一、什么是策略模式?

策略模式(Strategy Design Pattern):定义一系列算法,并将算法封装起来,使得它们可以相互替换。策略模式可以使得算法独立于客户端(即使用算法的地方)。

英语原文:

Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

策略模式有几个特点:

  • 存在多种算法
  • 算法之间可以相互替换,说明它们返回结果的影响是一样的,只是算法内部实现不同
  • 策略独立于客户端,单独实现

比如说,排序功能,排序的结果可能都是一样的,但是可以使用不同的算法,如选择排序、冒泡排序、快速排序等。

 桥接模式

桥接模式

一、什么是桥接模式?

桥接模式(Bridge Design Pattern):将抽象与实现解耦,让他们能够独立变化。

或者,桥接模式就是将类的功能层次结构和类的实现层次结构分离开来,降低它们的耦合度。

抽象,即类的功能层次结构,采用的是继承的方式。

实现,即类的实现层次结构,采用的是组合的方式。

 代理模式

代理模式

一、什么代理模式?

代理模式(Proxy Design Pattern):在不改变原始类(被代理类)的情况下,对它进行功能的增强。

代理模式有几个特点:

  • 不会改变原始类(被代理类)
  • 核心功能还是由原始类(被代理类)实现
  • 代理类只负责增强的那部分功能

代理,就是帮别人做事情,核心工作还是由被代理人做,但是其他琐碎的事则可以交给代理人。

 访问者模式

访问者模式

一、什么是访问者模式?

访问者模式(Visitor Design Patten):将作用于数据结构中的操作分离出来,形成单独的操作类,这样就可以在不改变数据结构的情况下,扩展出新的操作。

它将数据结构与数据处理分离开来,保持数据结构不变,而允许扩展新的处理。

 状态模式

状态模式

一、什么是状态模式?

状态模式(State Design Pattern):对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

通常情况下,状态只作为数据,而不是对象,它只在对象之间进行流转,是对象之间数据交流的一种方式。

状态模式,则是将状态也当成是一个对象,赋予它数据和行为动作,它的数据就是状态,行为动作就是状态转换。

 观察者模式

观察者模式

一、什么是观察者模式?

观察者模式(Observer Design Pattern):多个对象之间存在一对多的关系,当一个对象的状态发生改变时,所有其他依赖的对象都会收到通知。

观察者模式也被称为发布-订阅模式。

负责通知其他依赖对象称为被观察者,被通知的对象称为观察者。

在现实中,对象之间总是存在依赖关系的,一个对象的状态改变,往往会影响到其他的依赖对象。