设计模式(4)一――行为型模式(八)

2014-11-24 02:43:04 · 作者: · 浏览: 5
mo zongjian = new Majordomo("总见");
GeneralManager zongjingli = new GeneralManager("总警力");
jinli.SetSuperior(zongjian );
zongjian.SetSuperior(zongjingli );

Request request = new Request();
request.RequestType = "请假";
request.RequestContent = "小菜请假";
request.Number = 1;
jinli.RequestApplications(request );

Request request2 = new Request();
request2.RequestType = "请假";
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.