文章目录
- 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
29package 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
22package 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
22package 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
22package 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
22package 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
33package 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内容请搜索靠谱客的其他文章。
发表评论 取消回复