委派模式
概念: Delegate Pattern, 委托模式, 允许对象组合实现与继承相同的代码重用, 负责任务的调用和分配,特殊的静态代理, 属于行为型模式,不属于GOF模式。包含抽象任务角色,委派者角色, 具体任务角色。
源码: DispatcherServlet, ClassLoader
模板模式
概念: Template Method Pattern,模板方法模式。定义一个操作中的算法框架, 将一个步骤延迟到子类中,使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,属于行为型模式。包含抽象模板和具体实现两种角色。主要作用是复用和扩展
源码: BaseExecutor, Servlet
策略模式
概念: Strategy Pattern, 也叫政策模式(Policy Pattern)。将定义的算法家族分别封装起来,彼此可以互相替换,算法的变化不会影响到使用算法的用户,属于行为型模式。包含上下文角色,抽象策略角色和具体策略角色。
源码: Comparator, InstantiationStrategy
责任链模式
概念: Chain of Responsibility Pattern,将链中的每个节点看做一个对象,每个节点处理的请求都不同,内部自动维护下一个对象,将一个请求从链式的首端发出时,会沿着链的路径依次传递给每个节点对象,直至有对象处理这个对象,属于行为型模式。包含抽象处理者和具体处理者。
经典写法:
public abstract class Handler<T> {
protected Handler chain;
private void next(Handler handler) {
this.chain = handler;
}
public abstract void doHandler(T t);
public static class Builder<T> {
private Handler<T> head;
private Handler<T> tail;
public Builder<T> addHandler(Handler<T> handler) {
if (this.head == null) {
this.head = this.tail = handler;
return this;
}
this.tail.next(handler);
this.tail = handler;
return this;
}
public Handler<T> build() {
return this.head;
}
}
}
源码: Filter, ChannelHandler
迭代器模式
概念: Iterator Pattern,又被称为游标模式(Cursor Pattern)。提供一种顺序访问集合/容器元素的方法,无须暴露集合内部表示。迭代器模式可以为不同的容器提供相同的遍历行为,不用关心容器内容元素组成结构,属于行为型模式。本质是抽离集合对象迭代行为到迭代器,提供一致访问接口。包含抽象迭代器, 具体迭代器, 抽象容器和具体容器。
源码: Iterator
命令模式
概念: Command Pattern, 是对命令的封装, 每个命令都是一个动作,解耦了请求方和接收方,属于行为型模式。包含接收者角色,命令角色,具体命令角色,请求者角色。
源码: Runnable
状态模式
概念: State Pattern, 状态机模式,允许对象在内部状态发生改变时改变它的行为,对象看起来修改了它的类,属于行为型模式。主要包含环境类角色,抽象状态角色, 具体状态角色。
源码:Spring的状态机模式
备忘录模式
概念: Memento Pattern, 快照模式(Snapshot Pattern)或令牌模式(Token Pattern)。在不破坏封装的前提下,捕获一个对象的内部状态, 并在对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态,属于行为型模式。包含发起人,备忘录,备忘录管理员三个角色
源码: Spring中的StateManageableMessageContext
中介者模式
概念: Mediator Pattern, 调解者模式或调停者模式。用一个中介对象封装一系列的对象交互。中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型模式。包含抽象中介者,具体中介者,抽象同事类和具体同事类。
解释器模式
概念: Interpreter Pattern, 给定一门语言,定义文法的一种表示, 定义一个解释器, 表示来解析语言中的句子,按照规定的语法进行解析的模式,属于行为型模式。包含抽象表达式, 终结符表达式, 非终结表达式,上下文环境类。
源码实现: Pattern
观察者模式
概念: Observer Pattern, 发布订阅模式。定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,每当主题对象状态变化时,所有依赖于它的对象都会得到通知并被自动更新,属于行为型模式。包含抽象主题,具体主题,抽象观察者,具体观察者四种角色。
源码: ContextLoaderListener
访问者模式
概念: Visitor Pattern, 一种将数据结构与数据操作分离的设计模式。封装一些作用于某种数据结构中的各元素的操作,可以在不改变数据结构的前提下定义作用于这些元素的新的操作,属于行为型模式。包含抽象访问者,具体访问者,抽象元素,具体元素和结构对象。