责任链模式的定义
责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
模型:
Hander:抽象处理者
ConcreteHander:具体处理者
下面模型代码如下:
1.设计等级类
|
|
2.请求类
|
|
3.响应类
|
|
4.抽象处理者类
|
|
5.定义具体的处理者,这里就定义了两个:
|
|
6.调用:
前提是A到B组成了一个链,并且上面A的等级是0,B是1;发出的请求先经过A如果不能处理就交给B:
|
|
上面代码我传送的等级是1,结果应该是由B解决的,下面是运行结果:
如果你传入的等级不在A和B的范围,运行结果如下:
说明没有适合的了。
实例说明
如果上面的定义不是很明白,下面直接实例说明一下。
例子:家里的小孩想出去玩,需要请示一下,这里规定一级请示爸爸,爸爸同意了就可以出去玩了;如果爸爸不在家就请示(二级)妈妈,妈妈同意了也可以出去玩;如果都不在家就不允许出去玩。
1.编写等级类,响应类,请求类,这些都没有变化可以直接去上面看就可以了。
2.抽象处理类:
|
|
3.具体处理者,也就是爸爸和妈妈:
|
|
4.调用
如果传入的等级1:
|
|
运行结果:
传入其他的等级也可以,这个大家可以自己去试一试。
责任链模式的优缺点及其他
1.优点
- 耦合度降低,请求和处理是分开的
2.缺点
责任链太长或者每条链判断处理的时间太长会影响性能。特别是递归循环的时候
不一定被处理,每个职责类的职责很明确,这就需要对写默认的处理了
责任链模式重要的两点:分离职责,动态组合
本文部分定义参考了网上博文和网上信息…