一.责任链模式介绍:
使多个对象都有机会处理请求,从而避免了请求发送者和接收者之间的耦合关系,将这些对象连成一条链,并联着这条链传递该请求,知道有对象处理它为止。
二.使用场景:
对个对象可以处理同一个请求,但具体由哪个对象处理则在运行时动态决定。
三.例子:
<span style="font-size:18px;">public abstract class Leader {
/**
* 上一级了领导者
*/
protected Leader nextHandler ;
public final void handleRequest(int money){
if (money <= limit()){
handle(money);
}else{
if (nextHandler != null){
nextHandler.handleRequest(money);
}
}
}
/**
* 控制条件
* @return
*/
abstract int limit();
/**
* 具体处理行为
* @param money
*/
public abstract void handle (int money);
}
</span>
对象
的抽象。
public class GroupLeaders extends Leader{
int limit() {
System.out.println("GroupLeaders.limit()");
return 500;
}
public void handle(int money) {
System.out.println("GroupLeaders.handle()"+limit());
}
}
public class Director extends Leader {
int limit() {
System.out.println("Director.limit()");
return 1000;
}
public void handle(int money) {
System.out.println("Director.handle()" + limit());
}
}
public class Manager extends Leader {
int limit() {
System.out.println("Manager.limit()");
return 2000;
}
public void handle(int money) {
System.out.println("Manager.limit()" + limit());
}
}
public class Boss extends Leader {
int limit() {
System.out.println("Boss.limit()");
return 1000000;
}
public void handle(int money) {
System.out.println("Boss.limit()"+limit());
}
}
各个对象的具体实现,分为几个级别,在各个对象中,有限制条件。如果满足限制条件,则在本类中处理,否则传递给下一级。
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
GroupLeaders groupLeaders = new GroupLeaders();
Director director = new Director();
Manager manager = new Manager();
Boss boss = new Boss();
groupLeaders.nextHandler = director;
director.nextHandler = manager ;
manager.nextHandler = boss ;
groupLeaders.handleRequest(50000);
}
}
测试类。当
限制是50000 时,各级的反应。
GroupLeaders.limit()
Director.limit()
Manager.limit()
Boss.limit()
Boss.limit()
Boss.limit()1000000
输出日志。 可以看到,最后是Boss对象处理的,前面都是只判断了是否符合限制条件。
OK!暂时就这样