简介:
责任链模式的意图是避免请求发送者与接收者耦合在一起,让多个对象都有可能接受请求,将这些对象连接成一条链,并且沿着这条链传递请求,知道有对象处理它为止。
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
介绍:
![](https://i-blog.csdnimg.cn/blog_migrate/db668ef3c8f1c9a6ca6838b88db63a70.png)
优点 | 1.降低对象间的耦合度。客户端负责具体链的创建。 2.仅需要一个指向下一个对应的引用,简化对象连接。 |
缺点 | 1.链子过长,影响性能。 2.如果末尾没有处理机制,会导致不被处理。 |
特点 | 1.一个请求可能有多个接受者,但是最后真正的接受者只有一个。两者解耦。 2.末尾如果得不到下一个处理对象,需要有相应的处理机制。 |
抽象处理者角色(Handler) | 定义了抽象请求处理方法。需定义一个自类型的对象,作为其对下家的引用。通过该引用,处理者可以连成一条链。 |
具体处理者角色(ConcreteHandler) | 具体处理者,在处理请求之前需要进行判断,看是否满足要求否则沿着链子传给下一个。 |
使用:
//Handle
public abstract class ISalary
{
public ISalary Next;
public abstract void Process(double money);
}
//ConcreteHandler
public sealed class Level0 : ISalary
{
public override void Process(double money)
{
//do something
if (money >= 1 && money <= 5000)
{
}
else if (Next != null)
{
Next.Process(money);
}
}
}
//ConcreteHandler
public sealed class Level1 : ISalary
{
public override void Process(double money)
{
//do something
if (money >= 5001 && money < 8000)
{
}
else if (Next != null)
{
Next.Process(money);
}
}
}
//责任链模式调用
double money = 3000;
ISalary salary = new Level0();
salary.Next = new Level1();
salary.Process(money);
money = 6000;
salary.Process(money);