# 责任链模式
属于行为型模式。
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
优点:
- 降低耦合度。
- 简化了对象,使得对象不需要知道链的结构。
- 增强给对象指派职责的灵活性,可以随时增加或修改处理一个请求的结构。
- 易扩展。
缺点:
- 一个请求极有可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理
- 不正确的配置可能会造成循环调用(死循环)
- 可能会增加调试的难度
# 类图
# 代码
# 处理者抽象类
namespace BehavioralPatterns_ChainOfResponsibilityPattern | |
{ | |
/// <summary> | |
/// 处理者 | |
/// </summary> | |
public abstract class Handler | |
{ | |
/// <summary> | |
/// 继任者 | |
/// </summary> | |
protected Handler Successor; | |
/// <summary> | |
/// 设置继承者 | |
/// </summary> | |
/// <param name="Successor"></param> | |
public void SetSuccessor(Handler Successor) | |
{ | |
this.Successor = Successor; | |
} | |
/// <summary> | |
/// 处理请求 | |
/// </summary> | |
/// <param name="request"> 用于判断当前对象是否会处理请求 & lt;/param> | |
/// <param name="action"> 请求的内容 & lt;/param> | |
public abstract void Handle(int request, Action action); | |
} | |
} |
# 处理者
namespace BehavioralPatterns_ChainOfResponsibilityPattern | |
{ | |
public class Handler_0 : Handler | |
{ | |
public override void Handle(int request, Action action) | |
{ | |
if (request < 10) | |
{ | |
action(); | |
return; | |
} | |
Successor.Handle(request, action); | |
} | |
} | |
} |
namespace BehavioralPatterns_ChainOfResponsibilityPattern | |
{ | |
public class Handler_1 : Handler | |
{ | |
public override void Handle(int request, Action action) | |
{ | |
if (request >= 10) | |
{ | |
action(); | |
return; | |
} | |
Successor.Handle(request, action); | |
} | |
} | |
} |
# 测试
namespace BehavioralPatterns_ChainOfResponsibilityPattern | |
{ | |
public class Program | |
{ | |
private static void Main() | |
{ | |
Handler handler_0 = new Handler_0(); | |
Handler handler_1 = new Handler_1(); | |
handler_0.SetSuccessor(handler_1); | |
handler_0.Handle(20, () => { Console.WriteLine("Handle"); }); | |
} | |
} | |
} |
运行结果:
Handle