责任链模式
来源:互联网 发布:跑步鞋推荐 知乎 编辑:程序博客网 时间:2024/05/13 21:08
1.定义
责任链模式是行为型设计模式之一,它使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
2.实战演练
用三个BroadcastReceiver来演示责任链事件处理
FirstReceiver (当limit==1000的时候获取msg打印并退出,否则添加一个新的msg给下一个Receicer)
public class FirstReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int limit = intent.getIntExtra("limit", -1001); if(limit == 1000){ String msg = intent.getStringExtra("msg"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); abortBroadcast(); } else { Bundle b = new Bundle(); b.putString("new", "msg from FirstReceiver"); setResultExtras(b); } }}
SecondReceiver(当limit==100的时候获取msg和上一个reveicer添加的msg打印并退出,否则添加一个新的msg给下一个Receicer)
public class SecondReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int limit = intent.getIntExtra("limit", -1001); if(limit == 100){ String msg = intent.getStringExtra("msg"); Bundle b = getResultExtras(true); String str = b.getString("new"); Toast.makeText(context, msg + str, Toast.LENGTH_SHORT).show(); abortBroadcast(); } else { Bundle b = new Bundle(); b.putString("new", "msg from SecondReceiver"); setResultExtras(b); } }}
ThirdReceiver(当limit==10的时候获取msg和上一个reveicer添加的msg打印并退出,否则添加一个新的msg给下一个Receicer)
public class ThirdReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int limit = intent.getIntExtra("limit", -1001); if(limit == 10){ String msg = intent.getStringExtra("msg"); Bundle b = getResultExtras(true); String str = b.getString("new"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); abortBroadcast(); } else { Bundle b = new Bundle(); b.putString("new", "msg from ThirdReceiver"); setResultExtras(b); } }}
测试用的MainActiviy(当然三个BroadcastReceiver也要设置优先级)
Intent intent = new Intent(); intent.setAction("");//填在AndroidManifest.xml里面的action intent.putExtra("limit", 100);//只有SecondReceiver会来处理 intent.putExtra("msg", "msg from MainActivity"); sendOrderedBroadcast(intent, null);
3.总结
1.优点
可以对请求者和处理者的关系解耦,提高代码的灵活性。
2.缺点
每次都需要对链中请求处理者遍历,如果处理者太多那么遍历必定会影响性能,特别是在一些递归调用者中,要慎用。
0 0
- 责任链模式
- 深入浅出责任链模式
- 责任链模式
- 责任链模式
- 深入浅出责任链模式
- 责任链模式(一)
- 责任链模式(二)
- 责任链模式(三)
- 责任链模式
- java责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- c++ 责任链模式
- java责任链模式
- 责任链模式
- linux的通信方式之匿名管道
- 检测密码规范Java
- Ubuntu下虚拟机Bochs安装问题解决汇总
- POJ 2521 How much did the businessman lose G++
- 天梯赛 银行排队问题之单队列多窗口服务 (25分)
- 责任链模式
- POJ-2492 A Bug's Life
- scipy-note
- 25.session聚合统计之重构过滤进行统计
- Android Fragment完全解析,关于碎片你所需知道的一切
- sympy-note
- 蓝桥杯基础练习: 回文数
- HTML5视频教程
- 算法第五周作业01