博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android源码设计模式解析与实战(九)
阅读量:7057 次
发布时间:2019-06-28

本文共 1783 字,大约阅读时间需要 5 分钟。

hot3.png

1. 责任链模式介绍

责任链模式是行为型设计模式之一。将每个节点看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者间的耦合关系。

个人理解,和Android中的View事件处理机制类似

2. 责任链模式的使用场景

(1) 多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定

(2) 在请求处理者不明确的情况下向多个对象中的一个提交一个请求

(3) 需要动态指定一组对象处理请求

3. 责任链模式实例

Android中有两种广播,一种是Normal Braodcast普通广播,一种是Ordered Broadcast有序广播,普通广播是异步的,发出时可以被所有的接收者知道;而有序广播则是根据优先级依次传播的,直到有接收者将其终止或所有接收者都不终止它。有序广播的这一特性与责任链模式很接近。

public class FirstReceiver extends BroadcastReceiver {    @Override    public void onReceiver(Context context, Intent intent) {        int limit = intent.getIntExtra("limit", -1001);        if (limit == 1000) {            Toast.makeText(context, "First", Toast.LENGTH_SHORT).show();            // 终止广播            abortBroadcast();        } else {            // 不处理广播,广播继续发送给下一个接收者        }    }}public class SecondReceiver extends BroadcastReceiver {    @Override    public void onReceiver(Context context, Intent intent) {        int limit = intent.getIntExtra("limit", -1001);        if (limit == 100) {            Toast.makeText(context, "Second", Toast.LENGTH_SHORT).show();            // 终止广播            abortBroadcast();        } else {            // 不处理广播,广播继续发送给下一个接收者        }    }}public class ThirdReceiver extends BroadcastReceiver {    @Override    public void onReceiver(Context context, Intent intent) {        int limit = intent.getIntExtra("limit", -1001);        if (limit == 10) {            Toast.makeText(context, "Third", Toast.LENGTH_SHORT).show();            // 终止广播            abortBroadcast();        } else {            // 不处理广播,广播继续发送给下一个接收者        }    }}

 

转载于:https://my.oschina.net/android520/blog/845894

你可能感兴趣的文章
spring redis 配置子域名共享session (有点坑)
查看>>
Linux 条件变量 pthread_cond_signal及pthread_cond_wait
查看>>
比AtomicInteger更高效的并发计数器LongAdder
查看>>
做一个座右铭工具每天激励自己
查看>>
Jenkins安装配置
查看>>
vmware12下对虚拟机ubuntu14.10系统所在分区sda1进行磁盘扩容
查看>>
EJB到底是什么,真的那么神秘吗??
查看>>
UI开发工具
查看>>
广义表 (五)
查看>>
Swift中NSTimer定时器的使用
查看>>
Forms开发中触发器的执行顺序
查看>>
SEO博客三个月没更新排行骤步康复
查看>>
JQuery 插件开发的入门介绍
查看>>
马哥2016全新Linux+Python高端运维班第五周作业
查看>>
联想扬天A4680R台式电脑增加内存不识别的解决方案
查看>>
(5)Powershell别名(Alias)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
linux配置NTP Server
查看>>
PBDOM操作XML文档轻松入门
查看>>