1.概念:其实刚开始我也不是很理解这一模式。后面看到一些文章谈到Command模式的许多代码都是针对图形界面,它实际就是菜单命令。把这句话照搬到Android中,会发现我们经常做的一些如对点击事件的监听就是采用的这种模式:把对控件和对控件的事件处理分离开来,降低耦合性。它和适配器模式非常相似,只不过适配器是针对内容,而command是针对事件。

2.应用:android 中的点击监听事件就是command模式,对此我们也可以模仿源码来实现一个command模式。以系统Button的点击事件为原型,模仿自定义一个MyButton的设置点击监听事件。
a. 先看Button中的源码:

 public interface OnClickListener {        /** * Called when a view has been clicked. * * @param v The view that was clicked. */        void onClick(View v);    }public void setOnClickListener(OnClickListener l) {        if (!isClickable()) {            setClickable(true);        }        getListenerInfo().mOnClickListener = l;    }   public boolean performClick() {        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);        ListenerInfo li = mListenerInfo;        if (li != null && li.mOnClickListener != null) {            playSoundEffect(SoundEffectConstants.CLICK);            li.mOnClickListener.onClick(this);            return true;        }        return false;    }

b.模仿button:

// 1.自定义一个接口:public interface onMyButtonClickListener {        // 抽象的业务方法:        public void mybusiness();    }// 2.添加监听器private onMyButtonClickListener listener;public void setOnMyButtonClickListener(onMyButtonClickListener listener) {        this.listener = listener;    }@Override    public boolean performClick() {        // 点击button 按钮的时候,就会调用该方法:        // 在此方法中,可以实现业务类:用接口实现,具体业务类分离出来        // 3.内部调用监听器:==》一定要调用        if (listener != null) {            listener.mybusiness();        }        return super.performClick();    }

经过以上代码:MyButton就定义好了,现在在activity中调用该方法,看看能否响应点击事件:

public class MainActivity extends Activity {    private MyButton mButton;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mButton = (MyButton) findViewById(R.id.mybutton);        mButton.setOnMyButtonClickListener(new onMyButtonClickListener() {            @Override            public void mybusiness() {                Toast toast = Toast.makeText(getApplicationContext(), "响应点击事件", Toast.LENGTH_SHORT);                toast.setGravity(Gravity.CENTER, 0, 0);                toast.show();            }        });    }       }   

看测试结果,说明OK.

更多相关文章

  1. android小游戏制作基础,View实现游戏布局和方法
  2. 【Touch&input 】处理控制器操作(16)
  3. Android和java平台 DES加密解密互通程序及其不能互通的原因
  4. Android(安卓)内功心法(1.4)——android常用设计模式之代理模式
  5. RecyclerView的功能扩展(Android图片选择器)
  6. Android(安卓)代理模式
  7. 浅学设计模式之观察者模式及在android中的应用
  8. Android事件分发机制以及滑动冲突处理
  9. Android(安卓)Studio 报错Emulator: PANIC: Cannot find AVD sys

随机推荐

  1. 2010-11-4
  2. Android架构师之路
  3. 如何退出Android应用程序
  4. Android(安卓)之 复习大纲
  5. Andriod内核分析
  6. android设置Activity背景色为透明的2种方
  7. android Animation 动画效果介绍 续 .
  8. android EditText inputType 及 android:
  9. Android的建议
  10. Android(安卓)内核剖析