您的位置:首页 > 其它

责任链模式

2017-10-11 23:17 316 查看

1类图



2定义:

很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

3应用场景:

3.1 多个对象可以处理同一个请求,但具体由那个对象则在运行时动态决定。

3.2 在请求处理者的情况下向多个对象中的一个提交一个请求。

3.3 需要动态指定一组对象处理请求。

通用模板:

4抽象处理者

public abstract class Handler {
protected Handler successor;
public abstract void handleRequest(String condition);
}


5具体处理者1

public class ConcreteHandler1 extends Handler {

@Override
public void handleRequest(String condition) {
// TODO Auto-generated method stub
if(condition.equals("ConcreteHandler1")){
System.out.println("ConcreteHandler1 handled");
return;
}else{
successor.handleRequest(condition);
}
}

}


6具体处理者2

public class ConcreteHandler2 extends Handler {

@Override
public void handleRequest(String condition) {
// TODO Auto-generated method stub
if(condition.equals("ConcreteHandler2")){
System.out.println("ConcreteHandler2 handled");
return;
}else{
successor.handleRequest(condition);
}
}

}


7测试

public class Client {
public static void main(String[] args) {
ConcreteHandler1 handler1 = new ConcreteHandler1();
ConcreteHandler2 handler2 = new ConcreteHandler2();

handler1.successor = handler2;
handler2.successor = handler1;

handler1.handleRequest("ConcreteHandler2");
}
}


简单实现:

8抽象领导类

public abstract class Leader {
protected Leader nextHandler;

public final void handleRequest(int money){
if(money <= limit()){
handle(money);
}else{
if(null != nextHandler)
nextHandler.handleRequest(money);
}
}

public abstract int limit();
public abstract void handle(int money);
}


9组长类

public class GroupLeader extends Leader {

@Override
public int limit() {
return 1000;
}

@Override
public void handle(int money) {
System.out.println("组长批复报销: " + money + "元");
}

}


10主管类

public class Director extends Leader {

@Override
public int limit() {
// TODO Auto-generated method stub
return 5000;
}

@Override
public void handle(int money) {
// TODO Auto-generated method stub
System.out.println("主管批复报销: " + money + "元");
}

}


11经理类

public class Manager extends Leader {

@Override
public int limit() {
// TODO Auto-generated method stub
return 10000;
}

@Override
public void handle(int money) {
// TODO Auto-generated method stub
System.out.println("经理批复报销: " + money + "元");
}

}


12老板类

public class Boss extends Leader {

@Override
public int limit() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE;
}

@Override
public void handle(int money) {
// TODO Auto-generated method stub
System.out.println("老板批复报销: " + money + "元");
}

}


13测试类

public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
GroupLeader groupLeader = new GroupLeader();
Director director = new Director();
Manager manager = new Manager();
Boss boss = new Boss();

groupLeader.nextHandler = director;
director.nextHandler = manager;
manager.nextHandler = boss;

groupLeader.handleRequest(9000);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息