菜鸟也疯狂之责任链模式
责任链顾名思义就是一条链子,只不过这条链子上挂着些许对象,每个对象只负责处理分内的事情,不属于自己该做的事情就顺着链子交给下一个对象去处理。我们先上代码,结尾再加以解释
public class Event
{
public int num = 0;
public Event(int num){
this.num = num;
}
}
public abstract class BaseClass
{
protected string name;
public BaseClass next;
public BaseClass(string name){
this.name = name;
}
public abstract void Handle(Event e);
}
public class AClass:BaseClass
{
public AClass(string name) : base(name) {
}
public override void Handle(Event e)
{
if(e.num < 10) {
Debug.Log(name +":handle");
}
else{
if (next != null) next.Handle(e);
}
}
}
public class BClass:BaseClass
{
public BClass(string name) : base(name) {
}
public override void Handle(Event e)
{
if (e.num >= 10 && e.num <=20){
Debug.Log(name + ":handle");
}
else{
if (next != null) next.Handle(e);
}
}
}
public class CClass:BaseClass
{
public CClass(string name) : base(name){
}
public override void Handle(Event e)
{
if (e.num > 20){
Debug.Log(name + ":handle");
}
else {
if (next != null) next.Handle(e);
}
}
}
void Start()
{
//声明三个能够处理事件的对象
AClass zhangsan = new AClass("zhangsan");
BClass lisi = new BClass("lisi");
CClass wangwu = new CClass("wangwu");
//设置责任链
zhangsan.next = lisi;
lisi.next = wangwu;
//声明事件
Event et = new Event(15);
//zhangsan这个对象开始处理事件
zhangsan.Handle(et);
}
可以看到,不同对象的权限不同,对象zhangsan只负责处理当num小于10的情况,lisi负责处理10~20的情况,wangwu负责处理大于20的情况,而这是不是和分支语句if else很像?答对了,责任链模式说白了就是对if else的封装,把具体的if else 封装到不同对象的内部去进行判断。