request2.RequestContent = "小菜请假";
request2.Number = 4;
jinli.RequestApplications(request2 );
Request request3 = new Request();
request3.RequestType = "加薪";
request3.RequestContent = "小菜请求加薪";
request3.Number = 500;
jinli.RequestApplications(request3 );
Request request4 = new Request();
request4.RequestType = "加薪";
request4.RequestContent = "小菜请求加薪";
request4.Number = 1000;
jinli.RequestApplications(request4);
Console.Read();
}
}
abstract class Manager1 //管理者接口
{
protected string name; //管理者的姓名
protected Manager1 superior; //管理者的上级
public Manager1(string name)
{
this.name = name;
}
//设置管理者的上级
public void SetSuperior(Manager1 superior)
{
this.superior = superior;
}
//申请请求
abstract public void RequestApplications(Request request);
}
class CommonManager : Manager1 //经理
{
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);
}
}
class Majordomo : Manager1 //总监
{
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);
}
}
}
class GeneralManager : Manager1 //总经理
{
public GeneralManager(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 (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);
}
}
}
}
//24.5 加薪代码重构,在客户端让管理者形成链
namespace 职责链模式
{
class Class2
{
static void Main(string[] args)
{
CommonManager jinli = new CommonManager("精力");
Majordo