原文地址:
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系统本身的了解,也从优秀的设计中领悟模式的实际运用以及它适用的场景,避免在实际开发中的生搬硬套。
观察者模式(Observer Pattern)是另一种非常常见的设计模式,在很多系统中随处可见,尤其是涉及到数据状态发生变化需要通知的情况下。例如,AbstractCursor 类就是一个观察者模式的例子。 Android 设计模式系列还...
在Android系统中,设计模式是开发者理解和驾驭代码的关键。这些模式源自《设计模式:可复用面向对象软件的基础》一书,由“Gang of Four”(GoF)提出,被广泛应用于各种软件开发中,尤其是在Android框架内。本文将...
根据提供的文件信息“Android源码设计模式解析与实战.PDF(完整版)”,本文将深入探讨其中的关键知识点,包括但不限于Android开发中常见的设计模式及其在实际项目中的应用案例。 ### Android设计模式概述 #### 设计...
书中还详细分析了Android系统源码中的设计模式实现,例如,Android的BroadcastReceiver、ContentProvider、Service和Intent等组件,都体现了设计模式的运用。BroadcastReceiver使用了观察者模式,让多个接收器可以...
设计模式中的类关系主要包括依赖、关联、聚合和组合等几种形式。正确区分这些概念对于编写清晰、易于维护的代码至关重要。 - **依赖**:一种类A使用类B的功能,但并不持有类B的实例。 - **关联**:类A持有类B的一个...
在Android开发中,设计模式是提升代码质量和可维护性的重要工具。设计模式是对软件设计中常见问题的解决方案的模板,经过时间和实践的检验,能够帮助开发者有效地解决复杂性问题,提高代码的重用性和可扩展性。本...
下面将详细探讨Android设计模式中的关键知识点。 1. 单例模式(Singleton):在Android中,单例模式用于确保一个类只有一个实例,并提供全局访问点。例如,Android系统的应用上下文(Context)就是通过单例模式管理的...
《Android源码设计模式解析与实战》是一本深入探讨Android系统源码中设计模式应用的专业书籍,适合希望提升技术能力、研究源码或学习设计模式的开发者。这本书以清晰的结构和实例,揭示了Android系统背后的软件工程...
《Android系统博客系统设计与实现》是一个针对移动平台的博客应用开发项目,旨在提供一个集内容创作、分享、阅读于一体的平台。这样的系统对于计算机科学和技术、软件工程等专业的学生进行毕业设计具有很高的参考...
这本书不仅涵盖了基础的设计模式概念,还通过丰富的实例,尤其是Android系统源码中的实例,帮助读者理解并掌握这些模式的实际运用。 1. **设计模式基础**:书中首先介绍了设计模式的基本概念,它是软件工程中解决...
在这个"android 源码设计模式"主题中,我们将探讨Android系统源码中应用的一些主要设计模式,以及如何通过这些模式来提升自己的编程技巧。 1. **单例模式(Singleton)**:在Android中,例如`Application`类和`...
《何红辉关爱民-Android源码设计模式解析与实战》是一本专为Android开发者准备的进阶读物,旨在帮助读者深入理解Android系统的核心原理,并掌握如何在实践中运用设计模式提升代码质量与可维护性。书中内容涵盖了一...
本书不仅详细分析了Android系统内部使用的各种设计模式,还通过实战案例帮助读者深入理解这些模式的应用场景及其实现方法。 ### 一、设计模式简介 设计模式是一种在特定情况下解决软件设计问题的经验总结,它提供...
在Android开发中,设计模式是提升代码质量和可维护性的重要工具。"android设计模式"这一主题,主要涵盖了一些常见的设计原则、模式以及如何在Android环境中应用它们。《设计模式之禅》作为一本经典著作,其深入浅出...
《Android源码设计模式解析与实战》是一本深入探讨Android系统源码中设计模式应用的专业书籍,适合已经有一定Android开发基础并希望进一步提升技术能力的开发者阅读。这本书旨在通过实例解析,帮助读者理解并掌握...
在Android中,Android系统用它来创建各种视图(View)对象。 3. **观察者模式**:Android中的BroadcastReceiver就是观察者模式的实例,用于组件间的通信,当某个事件发生时,观察者会收到通知并做出相应。 4. **...
此外,书中可能还会讨论到Android源码分析的技巧和工具,如使用Android Studio的调试功能,阅读和理解系统级别的源码,这对于提升开发者对Android系统的深入理解至关重要。通过对源码的学习,开发者能更好地掌握系统...
《Android源码设计模式解析与实战》是一本深入探讨Android系统源码中设计模式应用的专业书籍。这本书旨在帮助开发者理解Android系统内部的工作机制,并通过实际案例来应用和掌握设计模式,提升开发技能和代码质量。 ...