zoukankan      html  css  js  c++  java
  • 职责链模式

    虚类中包含一个自己的同类对象叫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);
                }
            }
        }
    }
  • 相关阅读:
    Android 编程下 Eclipse 恢复被删除的文件
    Android 编程下背景图片适配工具类
    Android 编程下 Managing Your App's Memory
    Android 编程下代码之(QQ消息列表滑动删除)
    Android 编程下 Canvas and Drawables
    Android 编程下 AlarmManager
    Android 编程下去除 ListView 上下边界蓝色或黄色阴影
    Java 编程下字符串的 16 位、32位 MD5 加密
    C#枚举类型和int类型相互转换
    MVC和普通三层架构的区别
  • 原文地址:https://www.cnblogs.com/lsfv/p/11140050.html
Copyright © 2011-2022 走看看