责任链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实现中去
- 在“访问”的过程中以回调形式在访问者中处理操作逻辑。
- 如果要新增一组操作,那么只需要增加一个新的访问者。