概述参考请看 参考博客
1、责任链模式原型
模式原型代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Client : MonoBehaviour
{
private void Start () {
char problem = 'C';
IResponseHandler handlerA = new ResponseHandlerA();
IResponseHandler handlerB = new ResponseHandlerB();
IResponseHandler handlerC = new ResponseHandlerC();
//设置责任链
handlerA.SetNextHandler(handlerB).SetNextHandler(handlerC);
handlerA.Handle(problem);
}
}
/// <summary>
/// 抽象责任链类
/// </summary>
public abstract class IResponseHandler
{
protected IResponseHandler mNextHandler;
public IResponseHandler NextHandler { get { return mNextHandler; } }
public abstract void Handle(char problem);
public IResponseHandler SetNextHandler(IResponseHandler handler)
{
mNextHandler = handler;
return mNextHandler;
}
}
public class ResponseHandlerA : IResponseHandler
{
public override void Handle(char problem)
{
if (problem == 'A')
{
Debug.Log("HandlerA处理了A问题");
}
else
{
if (mNextHandler != null)
{
mNextHandler.Handle(problem);
}
}
}
}
public class ResponseHandlerB : IResponseHandler
{
public override void Handle(char problem)
{
if (problem == 'B')
{
Debug.Log("HandlerB处理了B问题");
}
else
{
if (mNextHandler != null)
{
mNextHandler.Handle(problem);
}
}
}
}
public class ResponseHandlerC : IResponseHandler
{
public override void Handle(char problem)
{
if (problem == 'C')
{
Debug.Log("HandlerC处理了C问题");
}
else
{
if (mNextHandler != null)
{
mNextHandler.Handle(problem);
}
}
}
}
2、责任链模式实例
游戏中应用:关卡系统。
3、责任链模式优缺点
优点
- 降低耦合杜,实现发送者和请求者代码分离。
缺点
- 请求不一定百分百被接收。
- 系统性能会受到影响。