Responsibility chain mode of GOF23 design mode

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);
		

	}

}

 

187 original articles published, 10 praised, 60000 visitors+
Private letter follow

Posted by taya on Thu, 30 Jan 2020 06:56:08 -0800