十七. 责任链模式
整理自 《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;
}
}
整理自 《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;
}
}