Java设计模式 - 责任链模式

目录

责任链模式:

责任链模式优点:

责任链模式应用:

责任链模式实例:

类图:

示例:

代码:

上述代码 GitHub 地址:https://github.com/baicun/designPatterns


责任链模式:

多个对象都有机会处理请求,为了避免请求发送者与接收者耦合在一起,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。

责任链模式优点:

将请求的发送者和处理者解耦,使多个对象都有机会处理这个请求;

客户端调用简单,无需关心发送请求给谁,链结构怎样,调用简化;

可以动态的增加或删减处理请求的链结构

责任链模式应用:

Servlet 过滤器

责任链模式实例:

类图:

Java设计模式 - 责任链模式_第1张图片

示例:

财务审批流程:财务人员计划购买一批货品,需要申请经费,于是他在OA系统上发起一笔经费请求(Client.java),不同经费额度分别有组长、部门经理、总经理审批,于是有了责任链设计模式。

代码:

客户端发起请求

//客户端发起请求
public class Client {

	public Client() { }

	public PurchaseRequest sendRequst(int Type, int Number, float Price) {
		return new PurchaseRequest(Type, Number, Price);
	}

}

 具体处理者-组长

public class GroupApprover extends Approver {

	public GroupApprover(String Name) {
		super(Name+" GroupLeader");
	}

	@Override
	public void ProcessRequest(PurchaseRequest request) {
		if (request.GetSum() < 5000) {
			System.out.println("**This request " + request.GetID()
					+ " will be handled by "
					+ this.Name + " **");
		} else {
			successor.ProcessRequest(request);
		}
	}

}

 具体处理者-部门经理

public class DepartmentApprover extends Approver {

	public DepartmentApprover(String Name) {
		super(Name + " DepartmentLeader");
	}

	@Override
	public void ProcessRequest(PurchaseRequest request) {
		if ((5000 <= request.GetSum()) && (request.GetSum() < 10000)) {
			System.out.println("**This request " + request.GetID()
					+ " will be handled by " + this.Name + " **");
		} else {
			successor.ProcessRequest(request);
		}
	}
}

 具体处理者-总经理

public class PresidentApprover extends Approver {

	public PresidentApprover(String Name) {
		super(Name + " President");
	}

	@Override
	public void ProcessRequest(PurchaseRequest request) {
		if (10000 <= request.GetSum()) {
			System.out.println("**This request " + request.GetID()
					+ " will be handled by " + this.Name + " **");
		}else {
			successor.ProcessRequest(request);
		}
	}
}

测试类:

public class MainTest {

	public static void main(String[] args) {
		//初始化数据
		Client mClient=new Client();
		Approver GroupLeader=new GroupApprover("Tom");
		Approver DepartmentLeader=new DepartmentApprover("Jerry");
		Approver President=new PresidentApprover("Bush");

		//设置责任链处理顺序
		GroupLeader.SetSuccessor(DepartmentLeader);
		DepartmentLeader.SetSuccessor(President);
		President.SetSuccessor(GroupLeader);

		//开始处理-设置处理起点:组长
		GroupLeader.ProcessRequest(mClient.sendRequst(1, 100, 40));
		GroupLeader.ProcessRequest(mClient.sendRequst(2, 200, 40));
		GroupLeader.ProcessRequest(mClient.sendRequst(4, 400, 140));

		//开始处理-设置处理起点:总经理
		/*President.ProcessRequest(mClient.sendRequst(1, 100, 40));
		President.ProcessRequest(mClient.sendRequst(2, 200, 40));
		President.ProcessRequest(mClient.sendRequst(4, 400, 140));*/
	}

}

 

上述代码 GitHub 地址:https://github.com/baicun/designPatterns

你可能感兴趣的:(碎片时间学习,java,23种设计模式,Java基础,java设计模式)