Java设计模式之Command在Android中的应用
16lz
2021-01-26
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.
更多相关文章
- android小游戏制作基础,View实现游戏布局和方法
- 【Touch&input 】处理控制器操作(16)
- Android和java平台 DES加密解密互通程序及其不能互通的原因
- Android(安卓)内功心法(1.4)——android常用设计模式之代理模式
- RecyclerView的功能扩展(Android图片选择器)
- Android(安卓)代理模式
- 浅学设计模式之观察者模式及在android中的应用
- Android事件分发机制以及滑动冲突处理
- Android(安卓)Studio 报错Emulator: PANIC: Cannot find AVD sys