Android学习按键事件监听与Command模式

  Android学习按键事件监听与Command模式

 

一 Command模式

意图:

    将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;

  对请求排队或记录请求日志,以及支持可撤销的操作。

    将请求被封装成一个对象,当向某对象提交请求时,使我们可以不用去知道被具体的请求的操作或者请求的接收者,

  实现了动作的请求者对象和动作的执行者对象之间的解耦合。

适用性:

  1. 使用Command模式代替callback形式的回调应用;
  2. 在不同的时刻指定、排列和执行请求,动态的更改请求;
  3. 支持取消操作;
  4. 支持修改日志,保存请求执行过程以便恢复操作;
  5. Command模式支持一组事务的调用操作。且易于增加扩展新事务; 

  (何为事务参考:http://book.51cto.com/art/201202/319377.htm

结构:

      

    

说明:

  Command:命令的封装者,声明命令执行的操作接口;

  ConcreteCommand:使命令的具体接收者执行相应的动作;

  Invoke:发出执行该命令的请求,存储具体命令执行者的抽象父类;

  Receiver:实施与执行具体相关请求的具体操作,由命令对象创建者指定;

 

  通过此图可以到此模式的核心:实现操作对象的调用Invoke与具体实施该操作的对象Receiver之间解耦,

是通过增加Command,将动作执行委托给Command来执行调用真正的动作执行者。

 

二 Android中OnClickListener

在View类中:

  public interface OnClickListener {

    void onClick(View v);

  }

  作用:Interface definition for a callback to be invoked when a view is clicked.

    就是一个click事件的回调接口。

  在需要响应click事件的View中,都需要注册一个相应的ClickListener来监听click事件发生时被调用。

看一下面这段代码:Button控件

  

public class MyActivity extends Activity {
  protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.content_layout_id);
         final Button button = (Button) findViewById(R.id.button_id);
         //注册click事件监听器
         button.setOnClickListener(new View.BtnOnClickListener());
  }
  private class BtnOnClickListener extends OnClickListener{
    public void onClick(View v) {
      // Perform action on click
    }
  }
}

看一下相应的这个结构: 

   

    

  这里面View就是Invoke,OnClickListener就是Command,MyActivity就是Receiver。

执行过程如下:

  

    

 

可以看到这种方式的应用属于:

  Command模式替换Callback函数形式的回调模型,让框架结构变得更清晰更灵活。

原文地址:https://www.cnblogs.com/bastard/p/2523973.html