`

Android系统设计中存在设计模式分析

 
阅读更多
原文地址:http://www.2cto.com/kf/201208/150650.html
1、 开闭(OCP)

简介:要扩展,不要修改。比如我对外提供了一个接口。现在想更新的话,不要直接修改这个接口,而是提供另外一个接口,然后通知大家在什么时间之前切换到这个新接口。

举例:这个设计模式无处不在,Android每次升级都会提供一些新的API,有一些较老的API就会置为deprecated。如从level  1就支持的Service.onStart,在level 5中,已经被Service.Service.onStartCommand替换,但Service.onStart依然保留没有去掉,以便继续提供过渡期的支持。

2、 合成复用

简介:少用继承(耦合性比较强),多用合成关系(灵活):接口、工具类等。

举例:进行任何开发,都会从一个主程序类,如Android中的Activity。我们需要在开发中把Activity中可以调用到的所有功能能分开的尽量分开,避免Activity太过臃肿。如Activity中需要用到读取资源的方法:getLayout、getDrawable等,因为这些功能属于和资源相关的,与Activity提供的生命周期控制功能相对独立,所以完全可以抽出来放到Resource里面。而在Activity中只提供一个getResource来获取使用就可以了。这样,任何模块都可以通过Context来获取并使用Resource。Resource所代表的这个资源管理模块的

用性更强。

3、 依赖倒转(DIP)

简介:分清细节和抽象的使用场景。传递参数、组合关系中,尽量使用抽象层的

举例:拿ImageView.setImageDrawable方法来举例。ImageView可以显示Bitmap,Xml,ninepatch等各种资源,根据依赖倒转原则的指导,我们完全不用根据每种类型都在ImageView类中开放一个方法,而是把它们都抽象成Drawable,而ImageView只接收Drawable就OK了。

4、 接口隔离

简介:每个接口只干一件事,不要把多个功能揉到一个接口中去。

举例:使用依赖倒转原则,可以把N个方法合成为一个方法,但这N个方法一定是同一个功能,只是不同的参数类型。如果功能不同,就不要生硬地拼在一起了,保持每个方法小巧而灵活。如果真的有一个需求需要连续调用N个小功能了,就那再上面再套一层壳吧,参见:调解者模式。

5、 适配器模式

简介:不同的数据提供者使用一个适配器来向一个相同的客户提供服务。

举例:这个最常见了,ListView、GridView都是经典例子,利用ListAdapter等把各种各样的数据和View连接在一起。

6、 里氏代换(LSP)

简介:一个继承树中,所有树节点都是抽象类,所有的叶子节点都是具体实现类。使用父类的地方可以传入任何一个子类。

举例:这个最经典的就是Android中的View继承树了,所有传入ViewGroup的方法可以传入任何一个继承自ViewGroup的容器;可以传入View的方法可以传入任何一个ViewGroup或者继承自View的控件。如setContentView(Viewv),既然参数是View,那么传入任何一个继承自View的控件都可以,如TextView,LinearLayout等。

7、 建造者模式

简介:可以分步地构造每一部分。

举例:这个模式的核心在于分步构造一个对象,Android中的经典就是AlertDialog.Builder的使用。

8、命令模式(Command)

简介:把请求封装成一个对象发送出去,方便定制、排队、取消。

举例:如通过Handler.post向MessageQueue发送一个Message命令,命令中包含参数arg1、arg2、what等参数,Handler内部会调用handleMessage来执行这个Message命令。

9、享元模式

简介:运用共享技术有效地支持大量细粒度的对象。

举例:Message.obtain通过重用Message对象来避免大量的Message对象被频繁的创建和销毁。

10、迭代器(Iterator)模式

简介:提供一个方法顺序访问数据集合中的所有数据而又不暴露对象的内部表示。

举例:如通过Hashtable.elements方法可以得到一个Enumeration,然后通过这个Enumeration访问Hashtable中的数据,而不用关心Hashtable中的数据存放方式。

11、调解者模式(Mediator)

简介:一个对象的某个操作需要调用N个对象的M个方法来完成时,把这些调用过程封装起来,就成了一个调解者

举例:如Resource.getDrawable方法的实现逻辑是这样的:创建一个缓存来存放所有已经加载过的,如果getDrawable中传入的id所对应的Drawable以前没有被加载过,那么它就会根据id所对应的资源类型,分别调用XML解析器生成,或者通过读取包中的图片资源文件来创建Drawable。

而Resource.getDrawable把涉及到多个对象、多个逻辑的操作封装成一个方法,就实现了一个调解者的角色。

12、备忘录模式(Memento)

简介:不需要了解对象的内部结构的情况下备份对象的状态,方便以后恢复。

举例:如Activity的onSaveInstanceState和onRestoreInstanceState就是通过Bundle这种序列化的数据结构来存储Activity的状态,至于其中存储的数据结构,这两个方法不用关心。这算是备忘录模式的一个经典例子。

13、观察者模式(Observer)

简介:一个对象发生改变时,所有信赖于它的对象自动做相应改变。

举例:我们可以通过BaseAdapter.registerDataSetObserver和BaseAdapter.unregisterDataSetObserver两方法来向BaseAdater注册、注销一个DataSetObserver。这个过程中,DataSetObserver就是一个观察者,它一旦发现BaseAdapter内部数据有变量,就会通过回调方法DataSetObserver.onChanged和DataSetObserver.onInvalidated来通知DataSetObserver的实现类。

14、原型模式(Prototype Pattern)

简介:在系统中要创建大量的对象,这些对象之间具有几乎完全相同的功能,只是在细节上有一点儿差别。

举例:比如我们需要一张Bitmap的几种不同格式:ARGB_8888、RGB_565、ARGB_4444、ALAPHA_8等。那我们就可以先创建一个ARGB_8888的Bitmap作为原型,在它的基础上,通过调用Bitmap.copy(Config)来创建出其它几种格式的Bitmap。

另外一个例子就是Java中所有对象都有的一个名字叫clone的方法,已经原型模式的代名词了。

15、代理模式(Proxy)www.2cto.com

简介:为其他对象提供一种代理以控制对这个对象的访问。

举例:翻呀翻,终于找到现成的例子了,这就是AIDL。所有的AIDL都一个代理模式的例子。假设一个Activity A去绑定一个Service S,那么A调用S中的每一个方法其实都是通过系统的Binder机制的中转,然后调用S中的对应方法来做到的。Binder机制就起到了代理的作用。

16、状态模式(State)

简介:状态发生改变时,行为改变。

举例:View.onVisibilityChanged方法,就是提供了一个状态模式的实现,允许在View的visibility发生改变时,引发执行onVisibilityChanged方法中的动作。

17、策略模式(Strategy)

简介:定义了一系列封装了算法、行为的对象,他们可以相互替换。

举例:Java.util.List就是定义了一个增(add)、删(remove)、改(set)、查(indexOf)策略,至于实现这个策略的ArrayList、LinkedList等类,只是在具体实现时采用了不同的算法。但因为它们策略一样,不考虑速度的情况下,使用时完全可以互相替换使用。
分享到:
评论

相关推荐

    Android源码设计模式分析

    通过分析Android系统中的设计模式来提升大家对设计模式的理解,从源码的角度来剖析既增加了对Android系统本身的了解,也从优秀的设计中领悟模式的实际运用以及它适用的场景,避免在实际开发中的生搬硬套。

    android框架设计模式和设计原则

    要想成为android高手,必须要掌握android框架才能提高开发效率,掌握设计模式提高解决问题速度,代码更健壮,熟悉设计原则会使android开发性能更好

    基于安卓Android的网上订餐系统毕业设计

    涉及模式:无线点餐系统主要用到的采用模型-视图-控制器MVC架构的设计模式。MVC架构是"Model-View-Controller",中文意思是"模型-视图-控制器"。MVC应用程序总是由这三个部分组成。 开发工具及环境:Eclipse环境

    Android设计模式--观察者模式DEMO

    Android设计模式--观察者模式DEMO 观察者模式是一个使用频率非常高的模式,他最常用的地方是GUI系统和订阅-发布系统。 该模式的最重要的作用就是解耦,使观察者和被观察者之间依赖尽可能小,甚至好无依赖。

    Android系统环境下软件设计模式的研究.pdf

    Android系统环境下软件设计模式的研究.pdf

    安卓点餐系统(Android前端开发,采用MVP设计模式).zip

    Android 项目是使用 Android 操作系统和相关开发工具开发的一款移动应用程序。Android 平台提供了丰富的功能和接口,开发人员可以使用 Java 或 Kotlin 等编程语言编写 Android 应用程序。Android 项目也可以是针对...

    安卓Android开发模式与框架设计

    此下载压缩包为安卓Android框架与设计开发模式,是对最近一些年Android开发的总结,相信会对你很有帮助!(此资源无毒无害,请放心下载)

    android系统原理及开发要点详解

     Android中、高级开发者:通过本书的引导,学习系统架构,关注开发要点,并尽量使用手机系统的通用设计思想、软件工程思想、系统工程思想来指导Android系统学习。  嵌入式Linux系统学习者:将Android作为一个集...

    《Android UI设计》PDF

    《Android UI设计》面向创建移动应用的产品经理、设计师和开发者,系统讲解了从事Android UI设计必须要掌握的Android平台的主要技术和特性,全面总结了Android UI的设计原理、设计理念和设计模式,并通过一个综合的...

    DesignPattern:23种设计模式,Android原始设计模式分析-android

    设计模式系列23种设计模式设计模式是一套被反复使用,多数人知道的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。本文将介绍23种设计模式。创建型...

    安卓Android平台的滴滴购物系统设计可导入AndroidStudio

    ## 系统客户端和服务器端架构技术: 界面层,业务逻辑层,数据层3层分离技术,MVC设计思想! ## 服务器和客户端数据通信格式: XML格式(用于传输查询的记录集)和json格式(用于传输单个的对象信息) 类似滴滴打车模式...

    android系统学习

    Android系统源代码情景分析 [罗升阳著][电子工业出版社][2012.10][840页].pdf Android官方API文档完整版.chm ANDROID的设计与实现 卷1_13259533.pdf Android(卷2)(带全目录完整版)邓凡平.pdf Android源码设计模式...

    基于Android平台的双模式点餐系统设计.pdf

    基于Android平台的双模式点餐系统设计.pdf

    基于Android平台的即时通信系统的设计与实现

    3、学习使用MVC模式来构建系统的客户端,并掌握这种程序设计模式,分析系统需求,设计出基于Android的简易即时通信系统,并利用Android SDK等予以实现,并对系统进行测试; 4、完成毕业论文的撰写,不少于12000字,...

    基于Android系统的智能社区平台系统APP设计与实现.docx

    2.3 Android应用程序设计模式 12 2.4 Android应用程序性能优化 13 第三章 智能社区平台系统设计 15 3.1 系统需求分析 15 3.2 系统总体设计 16 3.3 系统模块设计 17 3.4 系统数据库设计 19 第四章 智能社区平台系统...

    Android实现求职招聘系统,客户端+服务端,MVC设计模式

    系统客户端和服务器端架构技术: 界面层,业务逻辑层,数据层3层分离技术,MVC设计思想! 服务器和客户端数据通信格式:json格式,采用servlet方式 【服务器端采用SSH框架,请自己启动tomcat服务器,hibernate会自动...

    Android设计模式[蓝皮书]

    这篇文章应该是我转做Android 1年多第2次系统梳理设计模式的记录手稿,很全面,也有相应的案例讲解

    基于行为模式的Android平台入侵检测系统的设计与实现

    Android系统安全威胁和Android恶意软件行为模式的情况下,提出采用应用和 用户行为模式作为异常检测对象,并设计基于Markov链模型的用户和应用行为 模式的异常检测算法。最后给出了基于行为模式的Android平台入侵检测...

    基于Android的移动公交查询系统设计与实现

    在系统设计过程中,我们考虑了用户的需求以及公交查询系统的特点,采用了现代化的软件开发技术和流程,完成了对系统各个功能模块的设计与实现。在系统实现过程中,我们使用了Java、Android SDK等技术,采用了MVC模式...

    基于Android studio设计的图书管理系统APP

    一、用户模式 1. 权限授予; 2. 用户注册登录功能(头像、账号、密码); 3. 图书推荐功能; 4. 图书查询功能; 5. 图书数量查询; 6. 图书借出归还功能; 7. 修改资料、关于软件、联系我们、使用说明、更新版本、...

Global site tag (gtag.js) - Google Analytics