文档章节

Android源码设计模式解析与实战(九)

_
 _OUTMAN_
发布于 2017/02/24 23:11
字数 560
阅读 36
收藏 0
点赞 0
评论 0

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 {
            // 不处理广播,广播继续发送给下一个接收者
        }
    }
}
<receiver android:name=".FirstReceiver">
    <intent-filter android:priority="1000">
        <action android:name="com.test.action.ORDER_BROADCAST"/>
    </intent-filter>
</receiver>
<receiver android:name=".SecondReceiver">
    <intent-filter android:priority="100">
        <action android:name="com.test.action.ORDER_BROADCAST"/>
    </intent-filter>
</receiver>
<receiver android:name=".ThirdReceiver">
    <intent-filter android:priority="10">
        <action android:name="com.test.action.ORDER_BROADCAST"/>
    </intent-filter>
</receiver>

 

© 著作权归作者所有

共有 人打赏支持
_
粉丝 20
博文 125
码字总数 55043
作品 0
海淀
程序员
代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho ⋅ 04/09 ⋅ 0

Android 架构师7 设计模式之观察者模式

前言 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 观察者模式 被观察者,即主题角...

zhang_pan ⋅ 04/24 ⋅ 0

(一)Android中的单例模式

作为一个Android开发的老司机,或者刚入行的司机,我觉得你还是有必要学习下Android的单例模式,毕竟 单例模式是我们很常用的一个设计模式。 1. 介绍 1.1 定义 确保某一个类只有一个实例,而...

24K男 ⋅ 04/25 ⋅ 0

基于 MVP 架构使用Android通用开发框架快速开发微博项目实战

课程目标: 基于 MVP 架构使用Android通用开发框架快速开发微博项目实战 适应人群: 适合大学生和初中级android开发工程师,可以系统化的微博类APP的开发,系统化掌握商业化项目的开发。* 不...

13122542396 ⋅ 05/25 ⋅ 0

缅甸银河国际赌场开户13170533331

1.概念:将内容与控件相分离的一种设计(公式) ,达到内容灵活显示的目的。 2.适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。单独讲解接口的适配器模式 a. 接...

银河国际 ⋅ 05/26 ⋅ 0

Android 设计模式-装饰模式(Decorator Pattern)

定义 饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 UML结构图 Component:组件对象接口 Concre...

Code猎人 ⋅ 05/10 ⋅ 0

Android 架构师9 设计模式之策略模式

前言 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们之间可以相互替换。这些策略算法是相同行为的不同实现。 需求 三国故事中,刘备要到江东娶孙权的妹妹孙尚香,由于这行...

zhang_pan ⋅ 04/26 ⋅ 0

Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei ⋅ 05/26 ⋅ 0

人人都会设计模式:05、代理模式--Proxy

教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过 2、教程难度 初级,本人水平有限,文章内容难免会出现问题,如果有问题欢迎指出,谢谢 正文 一、什么是代理模式 1、生活中的代理 ...

TigerChain ⋅ 06/15 ⋅ 0

设计模式:观察者模式 源码分析和在 RecyclerView 中的体现

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 写在前面 最近在学习 EventBus 和 RxJava 相关知识,了解到两者都使用了观察者模式。以前对该模式只有一个模糊的概念,导致看 E 和...

Marker_Sky ⋅ 04/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 20分钟前 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部