职责链模式(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图