将能够处理同一类请求的对象连成一条链,传递到能处理的对象就处理,处理不了就向下传递,
应用场景: 打牌时 轮流出牌,接力赛跑, 公司公文审批
*****************************
代码实现:
原因类
package chainOfResp;
/***
*
* 请假请求
*
* */
public class LeaveRequest {
private String name;
private int leaveDays;
private String reason;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLeaveDays() {
return leaveDays;
}
public void setLeaveDays(int leaveDays) {
this.leaveDays = leaveDays;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public LeaveRequest(String name, int leaveDays, String reason) {
super();
this.name = name;
this.leaveDays = leaveDays;
this.reason = reason;
}
}
领导抽象类(含领导抽象方法)
package chainOfResp;
/**
* 抽象类
* */
public abstract class Leader {
protected String name;
protected Leader nextLeader; // 责任链上的下一个领导
public Leader(String name) {
super();
this.name = name;
}
// 设置责任链上的对象
public void setNexrtLeader(Leader nextLeader) {
this.nextLeader = nextLeader;
}
// 抽象方法
public abstract void handleRequest(LeaveRequest reql);
}
领导实现类
package FlyWeight;
import chainOfResp.Leader;
import chainOfResp.LeaveRequest;
public class Leader1 extends Leader{
public Leader1(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void handleRequest(LeaveRequest reql) {
// TODO Auto-generated method stub
if(reql.getLeaveDays()<3) {
System.out.println("员工"+reql.getName()+"请假"+reql.getLeaveDays()+"天,原因是"+reql.getReason()+";组长批准了");
}else {
if(this.nextLeader!=null) {
this.nextLeader.handleRequest(reql);
}
}
}
}
package chainOfResp;
public class Leader2 extends Leader{
public Leader2(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void handleRequest(LeaveRequest reql) {
// TODO Auto-generated method stub
if(reql.getLeaveDays()<10) {
System.out.println("员工"+reql.getName()+"请假"+reql.getLeaveDays()+"天,原因是"+reql.getReason()+";科长批准了");
}else {
if(this.nextLeader!=null) {
this.nextLeader.handleRequest(reql);
}
}
}
}
package chainOfResp;
public class Leader3 extends Leader{
public Leader3(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void handleRequest(LeaveRequest reql) {
// TODO Auto-generated method stub
if(reql.getLeaveDays()<30) {
System.out.println("员工"+reql.getName()+"请假"+reql.getLeaveDays()+"天,原因是"+reql.getReason()+";总经理批准了");
}else {
System.out.println("回家吧");
}
}
}
客户端调用
package chainOfResp;
import FlyWeight.Leader1;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Leader1 leader1 = new Leader1("张三");
Leader2 leader2 = new Leader2("李四");
Leader3 leader3 = new Leader3("王五");
leader1.setNexrtLeader(leader2);
leader2.setNexrtLeader(leader3);
LeaveRequest leaveRequest = new LeaveRequest("xiaoming", 9, "shopping");
leader1.handleRequest(leaveRequest);
}
}