【起源】
一个请求需要被多个对象中的一个处理,但不知道是哪一个。
结构化的做法是用if...else... ,即将请求与处理对象的映射关系硬编码。
希望找到一种方法,使映射关系灵活变化,即对“请求”和“处理对象”解耦。
【动机】
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
【核心】
对于某个处理对象:1.检查是否可处理请求 2.可以就处理 3.不可以就交给另外一个对象;
多个这样的处理对象按照指定关系排队,处理请求被看做“职责”,从前往后,就组成一条“职责链”。
只需把请求交给排头的“处理对象”,请求就会沿着“职责链”传递下去,直到被处理为止。
从结构化的角度来看,就是有优先级的判断处理机制。
现在换成了用面向对象来实现相同的功能,每个判断处理过程被封装成一个对象;
原来通过 if 语句的先后顺序确定优先级,现在通过对象之间的指定关系来确定;
本质:以面向对象的方式,实现带有优先级的判读处理。
【代码实例】
【模型图】