责任链模式
/**
* 责任链模式:
* 使得多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.
* 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理该请求为止
*
* 作用:
* 使得请求的发送者和接收者都没有对方的明确信息,且链中的自己并不知道链的结构.
* 从而实现简化对象的互相连接,它们仅仅需要一个指向后继者的引用,而不需要知道它所有的候选接收者的引用;
* 可以随时的增加或者修改一个请求的结构,增强了对象指派职责的灵活性
*
* 缺点:
* 一个请求极有可能到了链的末端也没有人处理,或者因为配置不正确得不到处理
*
*
* 例子:
* 传销...
*/
结构图
范例
abstract public class Handler {
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
abstract public void handle(int request);
}
public class ConcreteHandler extends Handler{
@Override
public void handle(int request) {
if (request<10){
Log.d("meee","请求等级"+request+"完成 by ConcreteHandler");
}else if (successor!=null){
successor.handle(request);
}
}
}
public class ConcreteHandler2 extends Handler {
@Override
public void handle(int request) {
if (request<20){
Log.d("meee","请求等级"+request+"完成 by ConcreteHandler2");
}else if(successor!=null){
successor.handle(request);
}
}
}
public class ConcreteHandler3 extends Handler {
@Override
public void handle(int request) {
Log.d("meee","请求等级"+request+"完成 by ConcreteHandler3");
}
}
//客户端代码
Handler handler1=new ConcreteHandler()
Handler handler2=new ConcreteHandler2()
Handler handler3=new ConcreteHandler3()
handler1.setSuccessor(handler2)
handler2.setSuccessor(handler3)
int[] ints={-1,100,2,15,23,11,9,22,6,1,13}
for (int num:ints){
handler1.handle(num)
}
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级-1完成 by ConcreteHandler
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级100完成 by ConcreteHandler3
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级2完成 by ConcreteHandler
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级15完成 by ConcreteHandler2
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级23完成 by ConcreteHandler3
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级11完成 by ConcreteHandler2
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级9完成 by ConcreteHandler
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级22完成 by ConcreteHandler3
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级6完成 by ConcreteHandler
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级1完成 by ConcreteHandler
04-12 10:56:34.852 1034-1034/com.junx.designpattem D/meee: 请求等级13完成 by ConcreteHandler2