• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#-设计模式-责任链模式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.问题

现在有一个命令需要层级审批,比如请假,

如果小于等于3天,那么只需要主管审批通过,

如果大于3天小于等于7天,则通过后又需要总监审批通过,

如果大于7天,通过后又需要总经理审批通过。

这样的业务流程如何实现呢?其实这就是一个典型的责任链模式的应用场景。

 

2.定义

命令的请求要经过多层判断,为了避免客户端和处理程序的耦合作用,将处理程序进行抽象,每个对象持有下一个处理对象的引用,就像是链表一样,一级一级的处理,这样的设计方式就叫做责任链模式。

 

3.代码

public abstract class Response
{
    protected Response NextResponse;

    public abstract void Handle(int dayNum);
}

public class Director : Response
{
    public Director()
    {
        NextResponse = new Chief();
    }

    public override void Handle(int dayNum)
    {
        Console.WriteLine("主管审批同意");
        if (dayNum > 3)
        {
            NextResponse.Handle(dayNum);
        }
    }
}

public class Chief : Response
{
    public Chief()
    {
        NextResponse = new TopManager();
    }

    public override void Handle(int dayNum)
    {
        Console.WriteLine("总监审批同意");
        if (dayNum > 7)
        {
            NextResponse.Handle(dayNum);
        }
    }
}

public class TopManager : Response
{
    public override void Handle(int dayNum)
    {
        Console.WriteLine("总经理审批同意");
    }
}

调用的时候只需要

Response direct = new Director();
direct.Handle(5);
Console.ReadLine();

 

4.特点

如果没有责任链的话,上面这个代码个人会怎么写呢,应该就是if+else不停地判断吧;

这样虽然没有什么错误,但是一旦判断增加,就不得不修改if语句,而且如果if中的业务逻辑很多的话,也很难维护

因此,责任链模式经常被用来重构if语句。

优点:将多个判断逻辑分别封装到了不同的类中,使代码的层次更明确

缺点:当判断比较多时,会有很多处理类,而且还有性能问题

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中,三种强制类型转换的对比发布时间:2022-07-14
下一篇:
asp.netC#将网页转换为.html格式发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap