Android 中用到的设计模式


文章来源 http://blog.csdn.net/goodlixueyong/article/details/51365294


Android系统使用Java语言进行开发,Android源码中设计模式的使用无处不在,以至于日常的开发中,也会根据不同的情况直接套用相应的设计模式。阅读Android源码的一大乐趣就是可以学习到Google大牛对设计模式的灵活运用。下面就来看一下Android系统都用了哪些常用的设计模式。

  • **模板方法模式**

这应该是我们在Android开发中接触的比较早的设计模式。新建一个Actiivty时都会覆盖onCreate、onResume等生命周期方法,这些方法是在父类中定义好的模板,会由系统自动回调,我们可以通过重写来替换掉这些方法,却无法改变他们的调用顺序。这是典型的模板方法模式。

我们在定义某些类时,常常会在父类中定义一个流程,然后在子类中去重写这个流程中的一些方法,这也是使用了模板方法模式。

  • 单例模式

Android中最常见的单例是Application类,它全局只有一个。不过Application的构造函数并非是私有的,也就是说我们可以new一个新的Application对象,因此Application这个类并不符合单例的规范。但是,即使我们重新new出来一个Application,它并没有绑定相关的上下文,也会是无效的,也就保证了全局只有一个有效的Application对象。

Android还有其他典型的单例的例子。比如InputMethodManager的构造函数为private的,然后定义了静态的getInstance方法来提供单例对象,这是标准的单例模式的定义方式。

  • 观察者模式

观察者模式在Android中无处不在,Android中的各种Listener,单击、双击、触摸事件的监听处理,都是观察者模式。另外ContentObserver、DataSetObserver这些用于数据变化观察的类也属于观察者模式。

  • 代理模式

Android大量使用了代理模式来向用户层提供系统服务。由于系统服务是运行在单独的远程进程中,Android系统通过Binder为远程服务提供了代理对象,应用可以通过代理对象来间接的访问系统服务。比如ActivityManagerService的主要作用是进行Activity的管理,用户无法直接访问ActivityManagerService,系统为我们提供了一个代理对象ActivityManager,通过它就可以获得ActivityManagerService提供的相关功能。

  • 责任链模式

Android中Touch事件的处理机制就符合责任链模式依次分发处理事件的特点,请求在各层级View之间依次传递,然后判断是否需要处理还是传递给下一级。

  • 享元模式

享元模式用于重复对象的复用,防止频繁的创建对象。Message的obtainMessage方法可以实现Message对象的重用,以避免大量的Message对象被频繁的创建和销毁,Handler也提供了obtainMessage方法实现同样的功能。因此,在使用Message的时候尽量不要通过new的方式手动去创建。

  • 适配器模式

通过ListView或GridView的Adapter,不同的数据源都可以向同一个ListView或GridView提供数据,Adapter起到的就是适配的功能。

  • 建造者模式

Effective Java里说,当遇到多个构造器参数时,考虑用建造者模式。建造者模式主要解决构造函数过多的问题。AlertDialog和Notification的构建都是使用的建造者模式,他们都提供了Builder静态内部类来实现建造过程,而Builder类提供了build方法实现最终对象的创建。

  • 命令模式
Android中两个典型的使用命令模式的类是Handler和ExecutorService。Handler类提供了post方法发送命令,ExecutorService类通过submit方法提交命令。

  • 原型模式

原型模式主要用来快速克隆出一个与已存在对象相同的新对象。

从java的角度,如果一个类实现了cloneable的clone()方法,那么它就是原型模式。在Android中,Intent、Bundle类都实现了clone方法。

Intent的实现

@Override
public Object clone() {
return new Intent(this);
} 

Bundle的实现
    @Override  
    public Object clone() {  
        return new Bundle(this);  
    }  







另外,Bitmap中也用到了原型模式。如果我们需要一张Bitmap的几种不同格式(ARGB_8888、RGB_565等),那我们就可以先创建一个ARGB_8888的Bitmap作为原型,在它的基础上,通过调用Bitmap.copy(Config)来创建出其它格式的Bitmap。

  • 备忘录模式

备忘录模式主要功能是实现状态或数据的备份和恢复。那么,很容易想到在Android中有与它对应的一套机制,即onSaveInstanceState和onRestoreInstanceState,这两个方法分别实现View或者Activity关键状态的保存和恢复,具体用法相信大家已经很清楚了。

Canvas类中的save和restore两个方法也是使用了备忘录模式。

  • 工厂方法模式

工厂方法模式在Android中比较明显的使用就是BitmapFactory,通过各种decodeXXX()方法就可以用不同方式获得Bitmap对象。

  • 策略模式

Android通过Animation来实现不同的动画,Animation可以设置不同的Interpolator,Interpolator就是提供了不同的策略,使得最终的动画呈现出来不同的效果。


大家经常会遇到的Android中使用的设计模式大概是这么多。当然Android中用到的设计模式不止这些,大家可以在学习和开发中慢慢去发掘和领悟,而且最好能够在开发中灵活运用各种设计模式。

关于java中gc的文章 http://blog.csdn.net/tjiyu/article/details/53982412


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章