极速理解设计模式系列:12.责任链模式(Chain of Responsibility Pattern)

简介:

四个角色:传递者接口(Handler)、具体传递者(ConcreteHandler)、客户端(Client) 

        传递者接口(Handler):定义一个处理请求的接口和实现下一个对象

        具体传递者(ConcreteHandler):如果能够处理就处理,否则让上级处理请求

        客户端(Client) :创立责任链,并向链中对象提出请求

 实现思路:传递者接口设置上级然后提供一个处理请求的方法,在具体传递中如果能够处理就处理,否则就让其上级来处理,客户端组织其责任链,并且设置请求。

 类图:

 

应用场景:OA系统中的请假审批系统,普通开发者想请假,如果请1天及以下的假则只需要开发经理许可,如果1天<请假天数<=5天则需要总监许可,如果5天<请假天数<=10天则需要副总裁批准,如果请假天数>10天则需要总裁许可。

分析:在客户端设置责任链和请假审批的上级下级,然后每次普通开发者将请假申请提交到开发经理,如果在开发经理许可范围之内,则处理,否则提交给他的上级总监,以此类推处理这个请假请求。

        下面我们在控制台程序去演示一下如何使用Chain of Responsibility Pattern:

        一、 传递者接口(Handler)

复制代码
    //传递者接口(Handler)
abstract class Higher
{
public string Name { get; set; }
public Higher higher;
public void SetHigher(Higher _Higher)
{
this.higher = _Higher;
}
public Higher(string name)
{
Name = name;
}
public abstract void ExeApply(Apply apply);
}
复制代码

        二、具体传递者(ConcreteHandler)

复制代码
    //具体传递者(ConcreteHandler)
class ManagerHigher : Higher
{
public ManagerHigher(string name) : base(name) { }
public override void ExeApply(Apply apply)
{
if (apply.ApplyDay <= 1)
Console.WriteLine(Name + " 批准 " + apply.ApplyName + " 申请了 " + apply.ApplyDay + "天假期");
else
higher.ExeApply(apply);
}
}

//具体传递者(ConcreteHandler)
class DirectorHigher : Higher
{
public DirectorHigher(string name) : base(name) { }
public override void ExeApply(Apply apply)
{
if (apply.ApplyDay <= 5)
Console.WriteLine(Name + " 批准 " + apply.ApplyName + " 申请了 " + apply.ApplyDay + "天假期");
else
higher.ExeApply(apply);
}
}

//具体传递者(ConcreteHandler)
class VPHigher : Higher
{
public VPHigher(string name) : base(name) { }
public override void ExeApply(Apply apply)
{
if (apply.ApplyDay <= 10)
Console.WriteLine(Name + " 批准 " + apply.ApplyName + " 申请了 " + apply.ApplyDay + "天假期");
else
higher.ExeApply(apply);
}
}

//具体传递者(ConcreteHandler)
class CEOHigher : Higher
{
public CEOHigher(string name) : base(name) { }
public override void ExeApply(Apply apply)
{
if (apply.ApplyDay>10)
Console.WriteLine(Name + " 批准 " + apply.ApplyName + " 申请了 " + apply.ApplyDay + "天假期");
else
higher.ExeApply(apply);
}
}
复制代码

        三、客户端(Client)

复制代码
    class Program
{
static void Main(string[] args)
{
//责任链模式的创建
Higher managerHigher = new ManagerHigher("张三经理");
Higher directorHigher = new DirectorHigher("李四总监");
Higher vpHigher = new VPHigher("王五副总裁");
Higher ceoHigher = new CEOHigher("林一总裁");
managerHigher.SetHigher(directorHigher);
directorHigher.SetHigher(vpHigher);
vpHigher.SetHigher(ceoHigher);

//创建申请人
Apply liuying = new Apply() { ApplyName = "刘颖", ApplyDay = 5 };
Apply chenming = new Apply() { ApplyName = "陈明", ApplyDay = 1 };
Apply zengli = new Apply() { ApplyName = "曾利", ApplyDay = 15 };

//申请人都将申请提交给经理
managerHigher.ExeApply(liuying);
managerHigher.ExeApply(chenming);
managerHigher.ExeApply(zengli);

Console.ReadLine();
}
}
复制代码

        申请人

复制代码
    //申请人
class Apply
{
public string ApplyName { get; set; }
public double ApplyDay { get; set; }
}
复制代码

        如需源码请点击 ResponsibilityPattern.rar  下载。


本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/10/08/2199128.html,如需转载请自行联系原作者


相关文章
|
2月前
|
设计模式 Java Spring
Java 设计模式之责任链模式:优雅处理请求的艺术
责任链模式通过构建处理者链,使请求沿链传递直至被处理,实现发送者与接收者的解耦。适用于审批流程、日志处理等多级处理场景,提升系统灵活性与可扩展性。
240 2
|
7月前
|
设计模式 算法 前端开发
【设计模式】【行为型模式】职责链模式(Chain of Responsibility)
一、入门 什么是职责链模式? 职责链模式是一种行为设计模式,它允许你将请求沿着一条链传递,直到有对象处理它为止。每个对象都有机会处理请求,或者将其传递给链中的下一个对象。 为什么需要职责链模式? 使用
264 16
|
3月前
|
设计模式 人工智能 算法
基于多设计模式的状态扭转设计:策略模式与责任链模式的实战应用
接下来,我会结合实战案例,聊聊如何用「策略模式 + 责任链模式」构建灵活可扩展的状态引擎,让抽奖系统的状态管理从「混乱战场」变成「有序流水线」。
|
10月前
|
设计模式 存储 Java
「全网最细 + 实战源码案例」设计模式——责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许将请求沿着处理者链进行发送。每个处理者可以处理请求或将其传递给下一个处理者,从而实现解耦和灵活性。其结构包括抽象处理者(Handler)、具体处理者(ConcreteHandler)和客户端(Client)。适用于不同方式处理不同种类请求、按顺序执行多个处理者、以及运行时改变处理者及其顺序的场景。典型应用包括日志处理、Java Web过滤器、权限认证等。
211 13
「全网最细 + 实战源码案例」设计模式——责任链模式
|
9月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
117 9
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
122 0
|
设计模式 JavaScript Scala
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
Kotlin教程笔记(55) - 改良设计模式 - 责任链模式
103 0
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
本教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速上手Kotlin的读者,推荐查阅“简洁”系列教程。本文通过学生会经费申请的例子,介绍了责任链模式及其在Kotlin中的实现,并使用偏函数进行了改进,使代码更加简洁和灵活。
83 0
|
设计模式 JavaScript Scala
Kotlin - 改良设计模式 - 责任链模式
Kotlin - 改良设计模式 - 责任链模式
82 0

热门文章

最新文章