职责链模式
Posted lsfv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了职责链模式相关的知识,希望对你有一定的参考价值。
虚类中包含一个自己的同类对象叫nextChain。重载方法中判断是否是自己应该处理的,并转给nextChain.这样一层一层。。。。
可以用管理类+数组来代替。
当然很明显职责链类少。简杰不简单。 至少学会这个可以更快看懂别人代码。
而管理类+数组,简单。没毛病。
个人感觉,有适合的地方,可以用。因为真的很简洁。
//看装饰模式的时候,如果看明白了。那么职责链就会秒懂了。因为2个东西,是一个技术。只是用来解决不同的问题而已。 //装饰模式,也需要一个链,因为必须一步一步的装饰。 //其实是一个很简单的技术,链表也是这样,只不过这里需要重载方法,所以是个虚类。超级简单。 //当然不用链表的技术,用一个数组来保存一个职责链,也没有任何问题。 //直接用数组替代这个模式,应该是没有违反第一 原则,开闭原则。 但是职责链,有一种简洁的感觉,不需要一个管理类来维护数组,也不需要在他们之间传递数据。 //个人感觉大多数情况可以用管理类+数组来代替这个模式。 除非像处理日志,这种可以肯定不会有更复杂的扩展的需求,可以考虑职责链模式。 //想象一下,如果要扩展变化了。处理职责的功能可能是动态的,需要的方法,对象不等,这就比较麻烦,所以职责链适合 某个底层,孤独模块,可以确定不会有大变动的模块。 //不确定,干脆不用呗。管理类+数组, 大家都秒懂。 public class ChainPattern public void Run() InfoMsg firstChain=new InfoMsg(); ErrorMsg sChain=new ErrorMsg(); firstChain.setNextChain(sChain); firstChain.printMsg("hi",enum_msgtype.info ); firstChain.printMsg("error!!",enum_msgtype.error ); public enum enum_msgtype info, debug, error public abstract class MyChain public enum_msgtype mMsgtype; public MyChain mNextChain; public abstract void printMsg(String msg,enum_msgtype msgtype); public void setNextChain(MyChain chain) mNextChain=chain; public class InfoMsg extends MyChain @Override public void printMsg(String msg,enum_msgtype msgtype) if(msgtype==enum_msgtype.info) LSComponentsHelper.LS_Log.Log_INFO("info:" + msg); if(mNextChain!=null) mNextChain.printMsg(msg,msgtype); public class ErrorMsg extends MyChain @Override public void printMsg(String msg,enum_msgtype msgtype) if(msgtype==enum_msgtype.error) LSComponentsHelper.LS_Log.Log_INFO("Error:" + msg); if(mNextChain!=null) mNextChain.printMsg(msg,msgtype);
以上是关于职责链模式的主要内容,如果未能解决你的问题,请参考以下文章