Java设计模式 - 责任链模式

目录

责任链模式:

责任链模式优点:

责任链模式应用:

责任链模式实例:

类图:

示例:

代码:

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


责任链模式:

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

责任链模式优点:

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

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

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

责任链模式应用:

Servlet 过滤器

责任链模式实例:

类图:

示例:

财务审批流程:财务人员计划购买一批货品,需要申请经费,于是他在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值