设计模式之----责任链模式
来源:互联网 发布:我好想你网络热播视频 编辑:程序博客网 时间:2024/06/05 08:16
闲来无事,回顾一下设计模式,顺手记录下。
责任链模式:多个处理者都有可能处理事件,从而避免发送者和接收者之间的耦合关系。将这些处理者形成一条链,沿着这条链,传递事件的请求,直到处理者将该事件处理为止。
几个名词解释
这里用的都是大白话
- 处理者:能够消费事件的对象
- 链:当前处理者对象有下一个处理者对象的引用,能够进行事件传递
- 发送者:将处理者组织成链条,并将事件传递给接收者(第一个处理者)
处理者的实现
创建一个Handler抽象类,持有下一个处理者的引用,同时,定义接收事件的方法,抽象:处理事件、条件判断的方法,让子类去处理。
public abstract class Handler { private static final String TAG = Handler.class.getSimpleName(); public Handler nextHandler; //处理事件,子类去实现 public abstract void handle(Context context, Event event); //当前处理者能处理的条件 public abstract int handleLevel(); //处理者处理事件的统一入口 public void handleEvent(Context context, Event event){ if (event != null){ if (event.getEventLevel() == this.handleLevel()){ //处理事件 handle(context, event); }else{ if (nextHandler != null){ // 让下一个事件处理者处理事件 nextHandler.handleEvent(context, event); }else{ Log.e(TAG,"没有处理者能够处理该事件"); } } } }}
实现具体的处理者:
public class Handler1 extends Handler { private static final String TAG = Handler1.class.getSimpleName(); @Override public void handle(Context context, Event event) { Toast.makeText(context,TAG+"处理了当前事件", Toast.LENGTH_LONG).show(); Log.e(TAG, TAG+"处理了当前事件"); } @Override public int handleLevel() { return 1; }}
请求的实现
事件请求,抽象一个事件被处理的条件,让实现者去返回当前事情被处理的条件。
public abstract class Event { /** * 返回当前对象 * @return */ public Event getEvent(){ return this; } //返回事件对应的级别,在处理者中使用 public abstract int getEventLevel();}
实现事件对象:
public class Event1 extends Event { @Override public int getEventLevel() { return 1; }}
发送者的实现
本例是安卓demo,在Activity中实现。将处理者拼装成链子,生成事件,将事件传递给链条头。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){// Toast.makeText(this,"点击了按钮",Toast.LENGTH_LONG).show(); //产生一个事件 Event3 event3 = new Event3(); Handler1 handler1 = new Handler1(); Handler2 handler2 = new Handler2(); Handler3 handler3 = new Handler3(); //将处理者拼装成链 handler1.nextHandler = handler2; handler2.nextHandler = handler3; // 处理者1调用事件处理的入口方法 handler1.handleEvent(this,event3); }}
阅读全文
0 0
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- java设计模式之责任链模式
- 设计模式之(责任链模式)
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- Jenkins搭建
- android 命令创建签名文件keystore、修改已有keystore的别名密码、重新签名APK
- 动态加载ini文件和dll文件
- Java注解
- freeswitch直接转发SDP并不进行声音编解码
- 设计模式之----责任链模式
- Chrome开发者工具不完全指南:(三、性能篇)
- iOS中TextField只能输入数字且小数点后最多输入两位
- ztree
- ztree模糊查询,只保留查询到的节点
- C# BackgroundWorker的使用
- 输入框中光标位置
- Chrome开发者工具不完全指南(四、性能进阶篇)
- mysql 赋给用户远程权限 grant all privileges on