您的位置:首页 > 移动开发 > Android开发

Android中用到了哪些设计模式?

2016-10-21 17:09 176 查看
所谓活学活用,学习了设计模式,作为一个Android开发者,你知道Android中哪些地方使用到了设计模式吗?


原创文章,尊重他人劳动成果,转载请注明出处http://blog.csdn.net/a369414641/article/details/52885328


1. 简单工厂模式——BitmapFactory

将具体的实例化工作交给一个静态的工厂类来负责,BitmapFactory正是完美符合此思想。


2. 原型模式——各个对象的clone方法,还有一些集合的copy方法。

原型模式通过已有的类复制出一个新的对象,减少对象创建的开销。(注意浅拷贝、和深拷贝的问题)。


3. 单例模式——java中太多了,比如 Calendar.getInstance()

单例模式用于保证全局只有一个该对象的实例。


4. 组合模式——Android中的View和ViewGroup

组合模式,我更喜欢把它叫做树模式,一个树中的节点统一表示,但却又分成叶子和枝条两种节点,而Android中的视图正是一个树形结构,所有的节点都是View,但是其中包含孩子的“枝条”节点是ViewGroup(ViewGroup继承了View)。


5. 责任链模式——Android的事件传递机制。

请求在一个相关责任者组成的链条上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求。

这个描述正是Android的事件传递机制的写照,事件从Activity开始在View的树形结构中往下分发,中途可以被某个View拦截处理。更多事件细节请参看本人另一篇博客:Android事件传递机制详解(嵌套自定义View示例)


6. 模版方法模式——Android的自定义View机制

模版方法模式定义一个操作中的算法的骨架,而子类可以重写其中的某个具体步骤。

Android的自定义View机制正是如此,父类View已经定义好了如下几个方法“骨架”,通过按顺序调用几个骨架方法实现了渲染界面功能。
onMeasure():测量控件本身的大小
onLayout():测量控件在父控件中的位置
onDraw():构建了自定义View的外观形象
onTouchEvent():重载视图的行为


而自定View就是重写上述方法的一个或多个,改变其中的某个步骤的具体实现。


7. 观察者模式——Android的Adapter提供了观测数据改变的方法

多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象。

以通过Adapter.registerDataSetObserver()方法可以注册一个DataSetObserver观察者。一旦Adapter内部数据有变,就会通过回调方法DataSetObserver.onChanged和DataSetObserver.onInvalidated来通知DataSetObserver的实现类。


8.享元模式——Java的String设计思想

享元即是共享“元”对象的意思,该模式的思想是,建立一个对象池,如果创建的对象里面已经有一个一模一样的了,就不要再创建了,从池子里返回这个对象给你用。像Java的String就是这样一个设计思想。


9. 代理模式——Android中的Binder机制。

当一个对象不可直接访问,或访问它需要一定条件、权限、困难的时候,就可以通过创建一个代理来访问它,在代理中解决上述困难。

Android的Sevice和Activity之间的通信就全靠代理“Binder”对象,Binder对象在Service内部定义,可以定义各种方法访问Service内部的资源,Activity在onServiceConnect()得到Binder对象,通过Binder代理间接访问Service.


10. 建造者模式——Android的ListView的建造方式,传入不同的Builder(Adapter)

建造者模式指的是,建造一类对象的方式的方法的顺序,方式是固定的。比如建造大楼,肯定是先打地基、再建骨架、再填充细节。楼与楼之间虽然是不一样的,但是步骤确是一样的。因此建造者模式有一个Director类,有一个抽象Builder类,使用者根据需要实现不同的Builder,传入Director中"进行建造"。

上面的描述就是Android ListView的建造方法的写照。虽然Android中的名称是Adapter,但是并不意味者它是适配器模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 设计模式 Java