设计模式——职责链模式

来源:互联网 发布:手机淘宝怎么看直播间 编辑:程序博客网 时间:2024/05/12 21:44

            定义:使多个对象都有机会处理客户端发出的请求,从而避免请求的发送者和接受之间的耦合关系,将这些对象连城一条线,沿着这条线传递该请求,直到有一个对象处理它为止。
        好处:当客户提交一个请求时,请求是沿着链传递,直到有一个对象来处理这个请求。而这个链是客户端来构造的,所以所对象这件具有灵活性。该设计模式解决了因为大量的分支判断造成难维护,灵活性差的问题。


       在设计机房这块的时候,因为下机涉及到一大堆判断。总不能在U层调一个方法判断一个吧。想着一个方法就搞定了。涉及的判断如下:首先判断卡号是否存在,卡号是否正在上机,然后在对用户类型进行判断,再然后对时间进行判断。加上同学们的说法,我就用了职责链模式。然而结果~~~ 。出现的问题:机房职责链的代码完成了,调试走了一遍,发现了一个严重的问题,这条链走完了,但是处理完了,它竟然又沿着这条链往回走了,又返回到了初始的继任者。真是醉了。于是果断放弃。遗憾的是把出错的代码给删了。


//请求类class Request{    public string RequestType;    public int Number;    public string RequestContent;}//抽象类 管理者abstract class Manager{    protected string name;    protected Manager superior;    public Manager(string name)    {        this.name = name;    }    public void SetSuperior(Manager superior)    {        this.superior = superior;    }    abstract public void RequestApplications(Request request);}//经理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);        }    }}//总监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);        }    }}

      总结:运用设计模式不能生搬硬套啊,一定要多看看别人的博客,多翻看以前的书本。遇到问题,多调试几遍。



0 0
原创粉丝点击