版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TheBestAge/article/details/82259330
职责链模式 |
职责链:当客户提交一个请求时,请求是沿着链传递,直至有一个ConcreteHandler对象负责处理,接收者和发送者都灭有对方的明确信息,且链中的对象自己也并不知道链的结构,仅需保持一个指向其后继者的引用。
具体实现 |
在机房重构中职责链主要用于确定学生的消费时间,以下为具体的实现:
抽象类
public abstract class Handler//处理请求的抽象类
{
protected Handler successor;
public void SetSuccessor(Handler successor)
{
this.successor = successor;
}
public abstract Line_info GetcumeTime(Line_info line);
}
具体处理者类,处理它负责的请求,也可以访问它的后继者
//未到达准备时间+最少上机时间
public class Preparetime : Handler
{
public override Line_info GetcumeTime(Line_info line)
{
double a = Convert.ToDouble(line.Leasttime) / 60;//获得带小数点的小时制时间
double b = Convert.ToDouble(line.Preparttime) / 60;
if (a + b > line.ConsumeTime)
{
line.ConsumeTime = 0;
}
else
{
successor.GetcumeTime(line);//转到下一位
}
return line;
}
}
具体处理者类,处理它负责的请求,也可以访问它的后继者
//超过准备上机时间+最少上机时间的消费时间
public class Consumetime : Handler
{
public override Line_info GetcumeTime(Line_info line)
{
double a = Convert.ToDouble(line.Leasttime) / 60;//获得带小数点的小时制时间
double b = Convert.ToDouble(line.Preparttime) / 60;
if (a + b < line.ConsumeTime)
{
line.ConsumeTime = line.ConsumeTime;
}
else
{
successor.GetcumeTime(line);
}
return line;
}
}
BLL层
//调用职责链模式,计算花费时间
//创建具体的处理对象,实例化时就将"对象的具体执行者"传过去
ChainModel.Preparetime preparetime = new ChainModel.Preparetime();
ChainModel.Consumetime consumtime = new ChainModel.Consumetime();
//从最开始的低层,设置上级
preparetime.SetSuccessor(consumtime);
//从链的最低层开始执行
Line_info line1 = preparetime.GetcumeTime(line);
总结 |
认真了解一下职责链模式的UML图,实践起来并不难。对于大型的项目来说,还是要考虑该请求的末端,确保该请求在此链中最终得到处理。