职责链模式

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);
            
        
    

 

以上是关于职责链模式的主要内容,如果未能解决你的问题,请参考以下文章

职责链模式

设计模式(十八)——职责链模式

图解Java设计模式之职责链模式

设计模式 职责链模式

职责链模式vs状态模式区别

大话设计模式Python实现-职责链模式