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

 

    @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中用到的设计模式不知这些,大家可以在学习和开发中慢慢去发掘和领悟,而且最好能够在开发中灵活运用各种设计模式。

       欢迎关注我的公众号一起交流学习

     

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Spring框架,有多种设计模式被广泛应用。以下是一些常见的设计模式在Spring的应用: 1. 单例模式(Singleton Pattern):Spring容器默认使用单例模式管理Bean对象。这意味着在整个应用程序,只会创建一个Bean实例,并且可以在多个地方共享使用。 2. 工厂模式(Factory Pattern):Spring使用工厂模式来创建和管理Bean对象。通过配置文件或注解,Spring容器可以根据需要动态地创建和提供Bean实例。 3. 代理模式(Proxy Pattern):Spring AOP(面向切面编程)使用代理模式来实现横切关注点的功能。通过代理对象,可以在目标对象的方法执行前后添加额外的逻辑,如日志记录、事务管理等。 4. 观察者模式(Observer Pattern):Spring的事件机制基于观察者模式。通过定义事件和监听器,可以实现应用程序内部的事件通知和处理。 5. 适配器模式(Adapter Pattern):Spring MVC框架的HandlerAdapter就是一个适配器模式的应用。它将不同类型的处理器适配到统一的处理器接口上,使得框架能够统一处理各种类型的请求。 6. 模板方法模式(Template Method Pattern):Spring的JdbcTemplate是一个典型的模板方法模式的应用。它定义了一系列的操作步骤,具体的实现由子类来完成。 7. 依赖注入模式(Dependency Injection Pattern):Spring的核心特性之一就是依赖注入。通过依赖注入,Spring容器可以自动将依赖关系注入到对象,降低了对象之间的耦合性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值