Responsibility GOF23 Design Patterns chain model

Object can process the same type of request together into a chain, is transmitted to the object can be processed on the processing, the processing can not be passed down to,

Scenario: turns out the card when playing cards, relay race, company document approval

*****************************

Code:

 The reason class

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

}

Leadership abstract class (abstract methods including leadership)

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

Leading the implementation class 

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("回家吧");
		}
	}

}

The client calls

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

	}

}

 

He published 187 original articles · won praise 10 · views 60000 +

Guess you like

Origin blog.csdn.net/wangrong111222/article/details/104111494