zoukankan      html  css  js  c++  java
  • 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函数形式的回调模型,让框架结构变得更清晰更灵活。

  • 相关阅读:
    谷歌(google)广告尺寸大小列表
    D盘Program Files 文件夹里文件不显示,没隐藏。怎么才能显示出来?
    请问IOS中做一个手机网站的app壳复杂吗?
    zblog2.X 连不上数据库原因
    二叉查找树的实现与讲解(C++)
    记一次应用异常,处理过程
    C# RSA加密
    js对象 c#对象转换
    C# 微信消息模板 发送
    iis 虚拟目录 文件服务器
  • 原文地址:https://www.cnblogs.com/bastard/p/2523973.html
Copyright © 2011-2022 走看看