我是靠谱客的博主 美丽钢笔,这篇文章主要介绍Android 责任链模式,现在分享给大家,希望可以做个参考。

文章目录

        • 1、责任链模式简介
        • 2、责任链的定义
        • 3、责任链的使用场景
        • 4、责任链模式的UML类图
        • 5、责任链模式的简单实现
          • 1)示例简介
          • 2)示例分析
          • 3)代码结构
          • 4) Leader 文件
          • 5)GroupLeader 文件
          • 6)、Director 文件
          • 7)、Manager 文件
          • 8)Boss 文件
          • 9)、MainActivity 文件
          • 10)打印 log

1、责任链模式简介

将每个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首段发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。

2、责任链的定义

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

3、责任链的使用场景

1)多个对象可以处理同一请求,但是具体哪个对象进行处理则在运行时动态决定。
2)在请求处理者不明确的情况下向多个现象中的一个提交一个请求。
3)需要动态指定一组对象处理请求。

4、责任链模式的UML类图

在这里插入图片描述

5、责任链模式的简单实现

1)示例简介

小A 出差 花费 5 万元,需要报销。
小A 找到组长 报销,然而 组长 只能报销 5000 以内数目, 于是组长找到部长报销

部长一看 自己也只有 一万元 报销权限,于是找到 经理报销

经理一看自己只有两万一下报销数目,于是找到老板报销

老板一看是报销单,于是给与报销

2)示例分析

我们可以看到 A 是事件发起者,而老板是最终解决者,他们并没有直接联系。
责任链模式很好的将请求的发起者与处理者解耦。

3)代码结构

在这里插入图片描述

1)Leader 是一个 抽象类 ,做了两件事情
(1)定义两个抽象方法,来确定一个领导者 应该有的属性和行为 及 批复金额大小,批复行为
(2)声明一个 判断该领导是否有 批复当前金额的能力

2)GroupLeader 继承Leader 类,用于处理自身范围内 报账
3)Director 继承Leader 类,用于处理自身范围内 报账
4) Manager 继承Leader 类,用于处理自身范围内 报账
5) Boss 继承Leader 类,用于处理自身范围内 报账
6)MainActivity 发起报账请求

4) Leader 文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.example.lum.myleadermodule; /** * Created by lum on 2018/11/24. */ public abstract class Leader { protected Leader nextHandler; //上一级领导处理者 //处理报账请求 public final void handleRequest(int money) { if (money <= limit()) { handle(money); } else { if (null != nextHandler) { nextHandler.handleRequest(money); } } } //自身能批复的额度, 不同阶级领导批复不一样 public abstract int limit(); //处理报账行为, 不同阶级领导 都可以在一定范围进行批复 public abstract void handle(int money); }
5)GroupLeader 文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.lum.myleadermodule; import android.util.Log; /** * Created by lum on 2018/11/24. */ public class GroupLeader extends Leader { private String TAG = "GroupLeader: "; @Override public int limit() { //组长只能批复 一千以内 return 1000; } @Override public void handle(int money) { Log.i(TAG,"组长批复报销: " + money + "元"); } }
6)、Director 文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.lum.myleadermodule; import android.util.Log; /** * Created by lum on 2018/11/24. */ public class Director extends Leader { private String TAG = "Director: "; @Override public int limit() { //部长只能批复 5000 以内 return 5000; } @Override public void handle(int money) { Log.i(TAG,"部长批复报销: " + money + "元"); } }
7)、Manager 文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.lum.myleadermodule; import android.util.Log; /** * Created by lum on 2018/11/24. */ public class Manager extends Leader { private String TAG = "Manager: "; @Override public int limit() { //经理只能批复 10000 以内 return 10000; } @Override public void handle(int money) { Log.i(TAG,"经理批复报销: " + money + "元"); } }
8)Boss 文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.lum.myleadermodule; import android.util.Log; /** * Created by lum on 2018/11/24. */ public class Boss extends Leader { private String TAG = "Boss: "; @Override public int limit() { //老板能批复 到公司破产 return Integer.MAX_VALUE; } @Override public void handle(int money) { Log.i(TAG,"老板批复报销: " + money + "元"); } }
9)、MainActivity 文件
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.example.lum.myleadermodule; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { private String TAG = "MainActivity: "; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //构造各个领导对象 GroupLeader groupLeader = new GroupLeader(); Director director = new Director(); Manager manager = new Manager(); Boss boss = new Boss(); //设置 上一级领导处理者对象 groupLeader.nextHandler = director; director.nextHandler = manager; manager.nextHandler = boss; //A 发起报账申请 Log.i(TAG,"小A 发起报账请求" ); groupLeader.handleRequest(50000); } }
10)打印 log

在这里插入图片描述

文献参考:
Android 源码设计模式解析与实战 第二版

本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。

最后

以上就是美丽钢笔最近收集整理的关于Android 责任链模式的全部内容,更多相关Android内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部