Connect the objects that can handle the same kind of requests into a chain, and transfer them to the objects that can handle them, and transfer them down if they can't handle them,
Application scenario: playing cards in turn, relay race, company official document approval
*****************************
Code implementation:
Cause class
package chainOfResp; /*** * * Request for leave * * */ 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; } }
Leadership abstract class (including leadership abstract method)
package chainOfResp; /** * abstract class * */ public abstract class Leader { protected String name; protected Leader nextLeader; // The next leader in the chain of responsibility public Leader(String name) { super(); this.name = name; } // Set up objects in the responsibility chain public void setNexrtLeader(Leader nextLeader) { this.nextLeader = nextLeader; } // Abstract method public abstract void handleRequest(LeaveRequest reql); }
Leadership implementation
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("staff"+reql.getName()+"leave"+reql.getLeaveDays()+"day,As a result of"+reql.getReason()+";Team leader approved"); }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("staff"+reql.getName()+"leave"+reql.getLeaveDays()+"day,As a result of"+reql.getReason()+";Section chief approved"); }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("staff"+reql.getName()+"leave"+reql.getLeaveDays()+"day,As a result of"+reql.getReason()+";Approved by the general manager"); }else { System.out.println("Go home"); } } }
Client call
package chainOfResp; import FlyWeight.Leader1; public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Leader1 leader1 = new Leader1("Zhang San"); Leader2 leader2 = new Leader2("Li Si"); Leader3 leader3 = new Leader3("Wang Wu"); leader1.setNexrtLeader(leader2); leader2.setNexrtLeader(leader3); LeaveRequest leaveRequest = new LeaveRequest("xiaoming", 9, "shopping"); leader1.handleRequest(leaveRequest); } }