Android:Android涉及到的设计模式
组合模式
Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在android UI设计,几乎所有的widget和布局类都依靠这两个类。
组合模式,Composite Pattern,是一个非常巧妙的模式。几乎所有的面向对象系统都应用到了组合模式。
将对象View和ViewGroup组合成树形结构以表示”部分-整体”的层次结构(View可以做为ViewGroup的一部分)。
组合模式使得用户对单个对象View和组合对象ViewGroup的使用具有一致性。
建造者模式
在Android中经常要使用AlertDialog来显示一些简单的窗口,通常的写法类似下面的代码 :
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("提示") .setMessage("确定退出?").create(); dialog.show();
可以看到dialog是通过Builder创建的,那么Builder是如何同AlertDialog协同工作的呢?其实AlertDialog的创建就是使用Builder模式,废话不多说,直接上代码吧。
备忘录模式
Activity的onSaveInstanceState和onRestoreInstanceState就是通过Bundle这种序列化的数据结构来存储Activity的状态。以便可以恢复Activity在onDestory之前保存的信息。
状态模式
View.onVisibilityChanged方法,就是提供了一个状态模式的实现,允许在View的visibility发生改变时,引发执行onVisibilityChanged方法中的动作。比如View的GONE,VISIBLE状态发生改变时,行为改变。
单例模式
android中有很多系统级别的全局变量,如时间,输入法,账户,状态栏等等,android中对这些都直接或者有些间接用到了单例模式。
观察者模式
在Android中,最典型的观察者模式就是”广播“。
(1)TimelineReceiver是观察者;
(2)重写OnReceive方法,来定义当收到状态变化时,订阅者的行为;
class TimelineReceiver extends BroadcastReceiver { // 1 @Override public void onReceive(Context context, Intent intent) { // 2 cursor.requery(); // 3 adapter.notifyDataSetChanged(); // 4 Log.d("TimelineReceiver", "onReceived"); } }
命令模式
android中用到许多多线程多进程,所以必然大量使用到Runbable,Thread。其实用的就是最简单的命令模式。
public interface Runnable { public abstract void run();}
调用者Thread简化版代码:
//命令模式这里不需要继承Runnable接口,但是这里考虑到实际情况,比如方便性等,继承了Runnable接口,实现了run方法,这个是Thread自身的运行run的方法class Thread implements Runnable { private Runnable target; public Thread(Runnable target) { this.target = target; } public synchronized void start() { if (threadStatus != 0 || this != me) throw new IllegalThreadStateException(); group.add(this); start0();//这个是本地方法,调用run方法 if (stopBeforeStart) { stop0(throwableFromStop); } } //可选 public void run() { if (target != null) { target.run(); } }}
客户端只需要new Thread(new Runnable(){}).start()就开始执行相关的一系列的请求,这些请求大部分都是实现Runnable接口的匿名类。
中介者模式
如Resource.getDrawable方法的实现逻辑是这样的:创建一个缓存来存放所有已经加载过的,如果getDrawable中传入的id所对应的Drawable以前没有被加载过,那么它就会根据id所对应的资源类型,分别调用XML解析器生成,或者通过读取包中的图片资源文件来创建Drawable。
而Resource.getDrawable把涉及到多个对象、多个逻辑的操作封装成一个方法,就实现了一个调解者的角色。
代理模式
假设一个Activity A去绑定一个Service S,那么A调用S中的每一个方法其实都是通过系统的Binder机制的中转,然后调用S中的对应方法来做到的。Binder机制就起到了代理的作用。
适配器模式
对于android开发者来说起,适配器模式简直太熟悉不过,有很多应用可以说是天天在直接或者间接的用到适配器模式,比如ListView。
ListView用于显示列表数据,但是作为列表数据集合有很多形式,有Array,有Cursor,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图)。
正是因为定义了这些适配器接口和适配器类,才能使我们的数据简单灵活而又正确的显示到了adapterview的实现类上。
更多相关文章
- android中访问本机服务器的方法
- Android中使用imageviewswitcher 实现图片切换轮播导航的方法
- Android NDK环境创建方法简介
- Unity3D和Android之间的方法交互(jar模式)
- Android BootLoader及两种刷机模式fastboot和recovery
- 一种在android中实现MVP模式的新思路