问题描述
加薪、请假申请会有层层审批的场景,比如向经理提出加薪申请,如果经理没有权限会上报给总监,总监如果没有权限会上报给总经理。
代码实现
请求类
public class Request
{
public string RequestType { get; set; }
public string RequestContent { get; set; }
public int Number;
}
经理抽象类
public abstract class Manager
{
protected string mName;
protected Manager mSuperiorManager;
public Manager(string name)
{
mName = name;
}
public void SetSuperiorManager(Manager superiorManager)
{
mSuperiorManager = superiorManager;
}
public abstract void RequestApplications(Request request);
}
经理相关具体实现类
public class CommonManager : Manager
{
public CommonManager(string name) : base(name) { }
public override void RequestApplications(Request request)
{
if (request.RequestType == "请假" && request.Number <= 2)
{
Console.WriteLine($"{mName}:{request.RequestContent} 数量{request.Number} 被批准");
}
else
{
if (mSuperiorManager != null)
{
mSuperiorManager.RequestApplications(request);
}
}
}
}
public class MajorManager : Manager
{
public MajorManager(string name) : base(name) { }
public override void RequestApplications(Request request)
{
if (request.RequestType == "请假" && request.Number <= 5)
{
Console.WriteLine($"{mName}:{request.RequestContent} 数量{request.Number} 被批准");
}
else
{
if (mSuperiorManager != null)
{
mSuperiorManager.RequestApplications(request);
}
}
}
}
public class GeneralManager : Manager
{
public GeneralManager(string name) : base(name) { }
public override void RequestApplications(Request request)
{
if (request.RequestType == "请假")
Console.WriteLine($"{mName}:{request.RequestContent} 数量{request.Number} 被批准");
else if (request.RequestType == "加薪" && request.Number<=5000)
Console.WriteLine($"{mName}:{request.RequestContent} 数量{request.Number} 被批准");
else
{
Console.WriteLine($"{mName}:{request.RequestContent} 数量{request.Number} 太多了,不批准");
}
}
}
Main方法
internal class Program
{
static void Main(string[] args)
{
Manager manager = new CommonManager("经理");
Manager majorManager = new MajorManager("总监");
manager.SetSuperiorManager(majorManager);
Manager generalManager = new GeneralManager("总经理");
majorManager.SetSuperiorManager(generalManager);
Request request = new Request();
request.RequestType = "请假";
request.RequestContent = "小菜申请请假";
request.Number = 1;
manager.RequestApplications(request);
request.RequestType = "请假";
request.RequestContent = "小菜申请请假";
request.Number = 10;
manager.RequestApplications(request);
request.RequestType = "加薪";
request.RequestContent = "小菜申请涨薪";
request.Number = 5000;
manager.RequestApplications(request);
}
}
执行结果
经理:小菜申请请假 数量1 被批准
总经理:小菜申请请假 数量10 被批准
总经理:小菜申请涨薪 数量5000 被批准