【Unity与23种设计模式】责任链模式(Chain of Responsibility)
来源:互联网 发布:化工控制软件 编辑:程序博客网 时间:2024/06/05 20:46
GoF中定义:
“让一群对象都有机会来处理一项请求,以减少请求发送者与接收者之间的耦合度。将所有的接受对象串联起来,让请求沿着串接传递,直到有一个对象可以处理为止。”
举个现实中的例子:
电信公司的客服系统。
公司有很多客服,需要客服解决的问题更加纷繁复杂
然而,每个问题都要经由每个客服,显然是不合理的
于是,就把客服分层
当有电话打进来时,首先接入的是电信客服
电信客服询问之后,发现问题自己没法解决,可能与网络业务有关,于是转接网络业务客服
如果网络业务客服也没有解决问题,又转给了网络机房客服
最终问题得以解决。
责任链模式让一群信息接收者能够一起被串联起来管理,让信息判断上能有一致的操作接口
不必因为不同的接收者而必须执行“类转换操作”,并且让所有的信息接收者都有机会可以判断
是否提供服务或将需求移往下一层接收者
游戏中的例子便是植物大战僵尸的关卡设计
判断消灭了多少僵尸,或者场上没有僵尸时跳转到下一波僵尸(下一关)
//请求接收者接口public abstract class Handler { protected Handler m_NextHandler = null; public Handler(Handler theHandler){ m_NextHandler = theHandler; } public virtual void HandleRequest(int Cost) { if (m_NextHandler != null) m_NextHandler.HandleRequest(Cost); }}
//定义3个子类实现Handler接口,处理传入参数Cost所需要的判断public class ConcreHandler1 : Handler { private int m_CostCheck = 10; public ConcreHandler1(Handler theNextHandler):base(theNextHandler) {} public override void HandleRequest(int Cost) { if (Cost <= m_CostCheck) Debug.Log("ConcreteHandler1.HandleRequst核准"); else base.HandleRequest(Cost); }}public class ConcreHandler2 : Handler { private int m_CostCheck = 20; public ConcreHandler2(Handler theNextHandler) : base(theNextHandler) { } public override void HandleRequest(int Cost) { if (Cost <= m_CostCheck) Debug.Log("ConcreteHanlder2.HandleRequst核准"); else base.HandleRequest(Cost); }}public class ConcreHandler3 : Handler { private int m_CostCheck = 30; public ConcreHandler3(Handler theNextHandler) : base(theNextHandler) { } public override void HandleRequest(int Cost) { Debug.Log("ConcreteHanlder3.HandleRequst核准"); }}
//测试类public class TestChainofResponsibility { void UnitTest() { ConcreHandler3 theHandler3 = new ConcreHandler3(null); ConcreHandler2 theHandler2 = new ConcreHandler2(theHandler3); ConcreHandler1 theHandler1 = new ConcreHandler1(theHandler2); theHandler1.HandleRequest(10); theHandler1.HandleRequest(15); theHandler1.HandleRequest(20); theHandler1.HandleRequest(30); theHandler1.HandleRequest(100); }}
//输出结果//ConcreteHandler1.HandleRequest核准;//ConcreteHandler2.HandleRequest核准;//ConcreteHandler2.HandleRequest核准;//ConcreteHandler3.HandleRequest核准;//ConcreteHandler3.HandleRequest核准;
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著
阅读全文
0 0
- 【Unity与23种设计模式】责任链模式(Chain of Responsibility)
- 【行为型模式】责任链模式(chain of responsibility)之23种java设计模式
- 浅谈设计模式:责任链模式(Chain Of Responsibility)
- Java设计模式----责任链模式(Chain of Responsibility)
- 设计模式:责任链模式(Chain of Responsibility)
- 设计模式之---责任链模式(Chain of Responsibility)
- 设计模式:责任链模式(Chain of Responsibility)
- 设计模式:责任链模式(Chain of Responsibility)
- 设计模式(17)-责任链模式(Chain of Responsibility)
- 设计模式_责任链模式(Chain Of Responsibility)
- [设计模式]责任链模式(Chain of Responsibility)
- 设计模式之责任链模式(Chain of Responsibility)
- 【设计模式】责任链模式(Chain of Responsibility Pattern)
- 23种设计模式之责任链模式(Chain of Responsibility)
- Java开发中的23种设计模式之十七:责任链模式(Chain of Responsibility)
- Java开发中的23种设计模式详解----责任链模式(Chain of Responsibility)
- 设计模式之责任链(Chain of Responsibility)
- 设计模式之-责任链(Chain of responsibility )
- 前端代码规范
- 如何应对别人说你的设计还可以更完美
- 匿名内部类的方法参数一定要设置final
- curl模拟http发送get或post请求
- 【CodeForces 158E】Phone Talks(DP)
- 【Unity与23种设计模式】责任链模式(Chain of Responsibility)
- Linux系统下Boost库编译与安装
- FileUtils的方法
- 替换空格
- HDU 1181 变形课
- 20.Redis Cluster
- Codeforces Round #430 (Div. 2) A. Kirill And The Game
- 交互设计新手路要怎么走
- action和action之间传数据