责任链Chain of Responsibility

  • 责任链模式把多个处理器串成链,然后让请求在链上传递
  • 责任链模式的好处是添加新的处理器或者重新排列处理器非常容易;
  • 责任链模式经常用在拦截、预处理请求、数据处理等领域。

    命令Command

  • 命令模式(Command)是指,把请求封装成一个命令,然后执行该命令。

  • 使用命令模式,确实增加了系统的复杂度。如果需求很简单,那么直接调用显然更直观而且更简单
  • 复杂到一定程度的系统,可能才需要用上command

解释器

  • 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
  • 解释器模式通过抽象语法树实现对用户输入的解释执行。
  • 解释器模式的实现通常非常复杂,且一般只能解决一类特定问题。

迭代器Iterator


中介Mediator

  • 中介模式是通过引入一个中介对象,把多边关系变成多个双边关系,从而简化系统组件的交互耦合度
  • Mediator模式经常用在有众多交互组件的UI上。
  • 为了简化UI程序,MVC模式以及MVVM模式都可以看作是Mediator模式的扩展。

备忘录Memento

  • 备忘录模式是为了保存对象的内部状态,并在将来恢复,大多数软件提供的保存、打开,以及编辑过程中的Undo、Redo都是备忘录模式的应用。

观察者Observer

  • 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
  • 又称发布-订阅模式(Publish-Subscribe:Pub/Sub)
  • Java标准库有个java.util.Observable类和一个Observer接口,用来帮助我们实现观察者模式。但是,这个类非常不!好!用!实现观察者模式的时候,也不推荐借助这两个东东。

状态State

  • 状态模式的设计思想是把不同状态的逻辑分离到不同的状态类中,从而使得增加新状态更容易;
  • 状态模式的实现关键在于状态转换。简单的状态转换可以直接由调用方指定,复杂的状态转换可以在内部根据条件触发完成。

    策略Strategy

  • 是指,定义一组算法,并把其封装到一个对象中。然后在运行时,可以灵活的使用其中的一个算法

  • 在一个方法中,流程是确定的,但是某些关键步骤的算法依赖调用方传入的策略,这样,传入不同的策略,即可获得不同的结果,大大增强了系统的灵活性。
  • Arrays.sort(T[] a, Comparator<? super T> c) 这里可以传入不同的比较器,这就是不同策略

模板方法

  • 主要思想是,定义一个操作的一系列步骤,对于某些暂时确定不下来的步骤,就留给子类去实现好了,这样不同的子类就可以定义出不同的步骤。
  • 为了防止子类重写父类的骨架方法,可以在父类中对骨架方法使用final
  • 对于需要子类实现的抽象方法,一般声明为protected,使得这些方法对外部客户端不可见。

访问者Visitor

  • 访问者模式的核心思想是为了访问比较复杂的数据结构,不去改变数据结构,而是把对数据的操作抽象出来,放在具体的visitor实现中去
  • 在“访问”的过程中以回调形式在访问者中处理操作逻辑。
  • 如果要新增一组操作,那么只需要增加一个新的访问者。