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) {
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) {
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 () {
return 5000 ;
}
@Override
public void handle (int money) {
System.out.println("主管批复报销: " + money + "元" );
}
}
11经理类
public class Manager extends Leader {
@Override
public int limit () {
return 10000 ;
}
@Override
public void handle (int money) {
System.out.println("经理批复报销: " + money + "元" );
}
}
12老板类
public class Boss extends Leader {
@Override
public int limit () {
return Integer.MAX_VALUE;
}
@Override
public void handle (int money) {
System.out.println("老板批复报销: " + money + "元" );
}
}
13测试类
public class Test {
public static void main (String[] args) {
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 );
}
}