责任链模式

十七. 责任链模式
整理自 《java与模式》阎宏编著


1.意图:

将多个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。客户端并不知道链上的哪个对象最终处理这个请求,从而降低了请求的发送者和接收者之间的耦合关系。

2.类图:
[img]http://eneasy.iteye.com/upload/picture/pic/10095/e73754ea-ca76-3ad3-9d64-2bd45cf348be.jpg[/img]


3.原理:

4.特征:

抽象处理者(Handler)角色:定义处理请求的接口。如有需要,可以定义设定和返回下家处理对象的引用的方法。

具体处理者(ConcreteHandler)角色:具体处理者接收到请求后,可以选择将请求处理掉,或者传给下家处理对象。
5.说明:

6.使用案例:

DHTML中的事件处理.
过滤器

7.代码:

//抽象处理者(Handler)角色 Handler.java

public abstract class Handler

{

protected Handler successor;


public abstract void handleRequest();


public void setSuccessor(Handler successor)

{

this.successor = successor;

}


public Handler getSuccessor()

{

return successor;

}

}


// ConcreteHandler1.java

public class ConcreteHandler1 extends Handler

{

public void handleRequest()

{

boolean someCondition = false;

if (someCondition)

{

//如果满足条件,进行处理

}

else

{

//否则,传递给下家处理

if (successor != null)

{

successor.handleRequest();

}

}

}

}


// ConcreteHandler2.java

public class ConcreteHandler2 extends Handler

{

public void handleRequest()

{

boolean someCondition = true;

if (someCondition)

{

//如果满足条件,进行处理

}

else

{

//否则,传递给下家处理

if (successor != null)

{

successor.handleRequest();

}

}

}

}


public class Client

{

public static int Main(String[] args)

{

// Set up chain (usually one need to be done once)

Handler firstHandler = new ConcreteHandler1();

Handler secondHandler = new ConcreteHandler2();

//Handler thirdHandler = new ConcreteHandler3();

firstHandler.setSuccessor(secondHandler);

//secondHandler.SetSuccessor(thirdHandler);


// After setting up the chain of responsibility, we can

// now generate requests and pass then off to the chain to be handled

firstHandler.handleRequest();

return 0;

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值