责任链模式(Chain of Responsibility Pattern)
某个请求需要多个对象进行处理,从而避免请求的发送者和接收之间的耦合关系。将这些对象连成一条链子,并沿着这条链子传递该请求,直到有对象处理它为止。
这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
优点:
1、降低耦合度。它将请求的发送者和接收者解耦。
2、简化了对象。使得对象不需要知道链的结构。
3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 4、增加新的请求处理类很方便。
缺点:
1、不能保证请求一定被接收。
2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
3、可能不容易观察运行时的特征,有碍于除错。
抽象审批者:
/// <summary>
/// 抽象审批者
/// </summary>
public abstract class Approver
{
public Approver approver;
public Approver SetApprover(Approver approver) { return this.approver = approver; }
public abstract void Processor(int Num);
}
具体审批者:1
/// <summary>
/// 具体审批者:处理器1
/// </summary>
public class Processor1 : Approver
{
public override void Processor(int Num)
{
if (Num < 10)
{
Debug.Log("处理器1:数据:" + Num);
}
else if (approver != null)
{
approver.Processor(Num);
}
else
{
Debug.Log("下级为空");
}
}
}
具体审批者:2
/// <summary>
/// 具体审批者:处理器2
/// </summary>
public class Processor2 : Approver
{
public override void Processor(int Num)
{
if (Num < 20)
{
Debug.Log("处理器2:数据:" + Num);
}
else if (approver != null)
{
approver.Processor(Num);
}
else
{
Debug.Log("下级为空");
}
}
}
具体审批者:3
/// <summary>
/// 具体审批者:处理器3
/// </summary>
public class Processor3 : Approver
{
public override void Processor(int Num)
{
if (Num < 30)
{
Debug.Log("处理器3:数据:" + Num);
}
else if (approver != null)
{
approver.Processor(Num);
}
else
{
Debug.Log("下级为空");
}
}
}
测试运行:
void Start()
{
Approver processor1 = new Processor1();
processor1
.SetApprover(new Processor2())
.SetApprover(new Processor3())
;
processor1.Processor(0);
processor1.Processor(10);
processor1.Processor(20);
processor1.Processor(30);
}
结果: