Android中使用到的设计模式

       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的实现

  1. @Override  
  2. public Object clone() {  
  3.     return new Intent(this);  
  4. }  
    @Override
    public Object clone() {
        return new Intent(this);
    }

Bundle的实现

  1. @Override  
  2. public Object clone() {  
  3.     return new Bundle(this);  
  4. }  
    @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中用到的设计模式不知这些,大家可以在学习和开发中慢慢去发掘和领悟,而且最好能够在开发中灵活运用各种设计模式。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值