什么是责任链模式

 

所谓责任链模式,就是使多个对象都有机会处理请求,并讲这些对象连成一条链,沿着这条链传递请求直到有对象处理请求为止的设计模式。责任链模式可以避免请求的发送者和接收者之间的耦合关系。

 

责任链模式的实现方式

 

熟悉我的人都知道我对华容道游戏情有独钟,2014年用AndEngine实现了一个华容道交了毕业设计,2015年用OGEngine参赛中了一部手机……我每年都要用不同的新技术实现一遍华容道。华容道的背景故事请见《三国演义》第五十回。

 

这次我拿华容道给大家讲解一遍责任链模式,首先定义一个抽象的将军类:

public abstract class General {

    protected General nextGeneral;

    /**
     * 姓名
     */
    public abstract String getName();

    /**
     * 武力
     */
    public abstract int getForce();

    /**
     * 拦截曹操
     * @param force 曹操手下将军能拿出来的最高武力
     */
    public final void tryCaoCao(int force){
        if (force <= getForce()){
            catchCaoCao();
        }else{
            if (nextGeneral != null){
                nextGeneral.tryCaoCao(force);
            }
        }
    }

    /**
     * 有能力抓获曹操
     */
    public void catchCaoCao(){
        Log.e("曹操无路可逃","曹操兵败走华容,正与" + getName() + "狭路逢。只为当初恩义重,放开金锁走蛟龙。");
    }

}

 

赵云:

public class ZhaoYun extends General {
    @Override
    public String getName() {
        return "赵云";
    }

    @Override
    public int getForce() {
        return 95;
    }
}

 

张飞:

public class ZhangFei extends General {
    @Override
    public String getName() {
        return "张飞";
    }

    @Override
    public int getForce() {
        return 97;
    }
}

 

关羽:

public class GuanYu extends General {
    @Override
    public String getName() {
        return "关羽";
    }

    @Override
    public int getForce() {
        return 100;
    }
}

 

曹操走华容道:

ZhaoYun zhaoYun = new ZhaoYun();
ZhangFei zhangFei = new ZhangFei();
GuanYu guanYu = new GuanYu();

zhaoYun.nextGeneral = zhangFei;
zhangFei.nextGeneral = guanYu;

zhaoYun.tryCaoCao(99);

 

你可以试试,输出结果和《三国演义》的剧情是否一致。

 

Android源码中的责任链模式

 

(1)如果你读完上文的代码之后,没有想到ViewGroup事件的分发处理机制,那么你不适合学习设计模式,还是先补充补充基础知识吧。

 

Android开发中如何利用责任链模式

 

1)责任链模式可以对请求者和处理者关系解耦,提高代码的灵活性。Broadcast可以分为异步的Normal Broadcast和根据优先级依次传播的Ordered Broadcast(有序广播)两种,有序广播根据优先级依次传播,直到有接收者将其终止或所有接收者都不中止它,这是典型的责任链模式。

 

需要注意的几个问题

 

1)责任链模式的最大缺点在于其对链中请求处理者的遍历,如果处理者层级太多,尤其是在递归调用中,责任链模式非常影响性能。


更多相关文章

  1. Android中设计模式无处不在之简单工厂模式和代理模式
  2. 微软新应用:Android移植到Windows Phone
  3. Android(安卓)SDK 1.5中文版 (Application基础—4)
  4. Android(安卓)百度地图开发源码示例 ——1
  5. windows下使用adb工具查看android程序cpu和内存消耗情况
  6. Android(安卓)SDK 1.5中文版 (Application基础—5)
  7. Android内存泄漏(使用单例模式造成的内存泄漏)
  8. 从Android到WP8 你将要面对的七大变迁
  9. Android学习笔记:活动(Activity)

随机推荐

  1. 2013 年第四届 Android(安卓)应用开发中
  2. Android(安卓)一种在Dalvik虚拟机上多Dex
  3. Kubernetes集群部署
  4. 板绘怎么给头发上色?板绘动漫人物头发上色
  5. 如何学手绘?自学手绘入门
  6. 云流送技术可以支持多人交互吗?【点量云】
  7. 画人物皮肤怎么上色?动漫皮肤厚涂上色方法
  8. Linux环境更换阿里源(CentOS+Ubuntu)
  9. 从IT职位到IT角色
  10. android内存优化