设计模式(二十)——职责链模式

职责链模式(Chain of Responsibility)

职责链模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。


代码

1.代码如下:

申请类

using System;

namespace ChainOfResponsibility
{
	//申请类
	public class Request
	{
		//申请类别
		public string requestType;
		//申请内容
		public string requestContent;
		//数量
		public int number;
	}
}

管理者

using System;

namespace ChainOfResponsibility
{
	//管理者
	public abstract class Manager
	{
		protected string name;
		//管理者的上级
		protected Manager superior;

		public Manager (string name)
		{
			this.name = name;
		}
		//设置管理者的上级
		public void SetSuperior(Manager superior){
			this.superior = superior;
		}
		//申请请求
		public abstract void RequestApplications(Request request);
	}
}

经理类

using System;

namespace ChainOfResponsibility
{
	//经理类
	public class CommonManager:Manager
	{
		public CommonManager(string name):base(name){}
		public override void RequestApplications (Request request)
		{
			if (request.requestType == "请假" && request.number <= 2) {
				Console.WriteLine ("{0}:{1}数量{2}被批准", name, request.requestContent, request.number);
			} else{
				if (superior != null) {
					superior.RequestApplications (request);
				}
			}
		}
	}
}

总监类

using System;

namespace ChainOfResponsibility
{
	//总监类
	public class Majordomo:Manager
	{
		public Majordomo (string name):base(name)
		{
		}
		public override void RequestApplications (Request request)
		{
			if (request.requestType == "请假" && request.number <= 5) {
				Console.WriteLine ("{0}:{1}数量{2}被批准", name, request.requestContent, request.number);
			} else{
				if (superior != null) {
					superior.RequestApplications (request);
				}
			}
		}
	}
}

总经理类

using System;

namespace ChainOfResponsibility
{
	//总经理类
	public class GeneralManager:Manager
	{
		public GeneralManager (string name):base(name)
		{
		}
		public override void RequestApplications (Request request)
		{
			if (request.requestType == "请假") {
				Console.WriteLine ("{0}:{1}数量{2}被批准", name, request.requestContent, request.number);
			} else if (request.requestType == "加薪" && request.number <= 500) {
				Console.WriteLine ("{0}:{1}数量{2}被批准", name, request.requestContent, request.number);
			} else if (request.requestType == "加薪" && request.number > 500) {
				Console.WriteLine ("{0}:{1}数量{2}再说吧", name, request.requestContent, request.number);
			}
		}
	}
}
2.客户端代码:

客户端

using System;

namespace ChainOfResponsibility
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			CommonManager commonManager = new CommonManager ("经理");
			Majordomo majordomo = new Majordomo ("总监");
			GeneralManager generalManager = new GeneralManager ("总经理");

			commonManager.SetSuperior (majordomo);
			majordomo.SetSuperior (generalManager);

			Request request = new Request ();
			request.requestType = "请假";
			request.requestContent = "XX请假";
			request.number = 1;
			commonManager.RequestApplications (request);

			Request request2 = new Request ();
			request2.requestType = "请假";
			request2.requestContent = "XX请假";
			request2.number = 4;
			commonManager.RequestApplications (request2);

			Request request3 = new Request ();
			request3.requestType = "加薪";
			request3.requestContent = "XX请求加薪";
			request3.number = 500;
			commonManager.RequestApplications (request3);

			Request request4 = new Request ();
			request4.requestType = "加薪";
			request4.requestContent = "XX请求加薪";
			request4.number = 1000;
			commonManager.RequestApplications (request4);
		}
	}
}
3.运行结果


UML图



源码下载地址 :https://gitee.com/ZhaoYongshuang/DesignPattern.git


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值