随笔分类 - Android设计模式系列
基于android的各种代码分析各种设计模式
摘要:建造者模式把构造和表示分离开,根据客户需求生产一个相应的对象。本来呢,我们根据Builder接口实现不同的具体的ConcreteBuilder,就可生产不同的对象了。但是,下面例子的只有一个Builder,所以也没有接口Builder,也没有其他的ConcreteBuilder。但是我今天要讲的例子太简单,简单到都不觉得是建造者模式,但是又有建造者模式的感觉。1. 意图将一个复杂对象的构建和它的表示分离,使得同样的创建过程可以创建不同的表示。2.结构图和代码android中大量的使用对话框组件,它的调用方法就是构建,拼接,表示。Builder通过setTitle(),setMessage(),
阅读全文
摘要:策略模式其实特别简单(听到这句话,大家是不是心里一下子放松了?)。比如排序,官方告诉大家我这里有一个排序的接口ISort的sort()方法,然后民间各尽其能,实现这个排序的方法:冒泡,快速,堆等等。这些方法就是“不同的策略”。然后,某个模块下,需要一个排序方法,但是暂时不能指定具体的sort方法(出于扩展的考虑),就需要使用ISort接口了。最后,具体什么场景下,传入什么具体的sort方法,实现灵活的排序。这就是策略模式!下面,我们分析Android中的动画是如何使用策略模式的。1. 意图定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。策略模式使得算法可独立于使用它的客户而变化。
阅读全文
摘要:CV一族,应该很容易理解原型模式的原理,复制,粘贴完后看具体情况是否修改,其实这就是原型模式。从java的角度看,一般使用原型模式有个明显的特点,就是实现cloneable的clone()方法。原型模式,能快速克隆出一个与已经存在对象类似的另外一个我们想要的新对象。1.意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。热门词汇:克隆 深拷贝 浅拷贝2.结构图和代码它的结构图非常简单,我们以Intent为例子:Intent的clone方法非常简单: @Override public Object clone() { return new Intent(...
阅读全文
摘要:对于android开发者来说起,适配器模式简直太熟悉不过,有很多应用可以说是天天在直接或者间接的用到适配器模式,比如ListView。ListView用于显示列表数据,但是作为列表数据集合有很多形式,有Array,有Cursor,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图)。正是因为定义了这些适配器接口和适配器类,才能使我们的数据简单灵活而又正确的显示到了adapterview的实现类上。适配器模式,Adapter Pattern,勇敢的去适配,大量的资源可以重用。1.意图适配器模式,把一个类的接口变换成客户端所期待的另一种接口,从而使原本不匹配而无法在
阅读全文
摘要:工厂方法模式,往往是设计模式初学者入门的模式,的确,有人称之为最为典型最具启发效果的模式。android中用到了太多的工厂类,其中有用工厂方法模式的,当然也有很多工厂并不是使用工厂方法模式的,只是工具管理类。今天以ThreadFactory举例说明一下简单工厂模式和工厂方法模式。工厂方法模式,Factory Method,简单的方式,不简单的应用。1.意图定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方式模式使一个类的实例化延迟到其子类。热门词汇:虚构造器 延迟 创建对象 子类2.结构图和代码我们先看看标准的工厂方法结构图:先抽象的产品类,抽象的工厂类,然后用客户端具体的工厂生产相应
阅读全文
摘要:命令模式,在.net,java平台的事件机制用的非常多,几乎每天都与之打交道。android中对我印象最深的就是多线程多进程的环境,所以必然大量使用到Runbable,Thread,其实用的就是最简单的命令模式。命令模式,Command Pattern,把请求封装为一个对象,多么巧妙的一个说法啊。1.意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。热门词汇:动作 事物 请求封装 排队 打包 异步2.结构Command接口提供了Execute方法,客户端通过Invoker调用命令操作来调用Recriver,绕了一大圈,但是却把
阅读全文
摘要:享元模式,给我的感觉就是对象池,缓存单例对象。java中的享元模式最经典的例子就是String类了,还有一个最容易理解的就是word文档字符共享的例子,也是享元模式的经典应用。本文对android中的sql编译类SQLiteCompiledSql说明,展开分析,也是很容易理解的一个例子,其实,android SDK中必然有很多地方需要用到享元模式。享元模式,Flyweight Pattern,说的严重点,一些程序如果不使用享元模式的话,根本不能使用面向对象的方法实现,对象会多的撑爆你的内存:"用面向对象思想设计的应用常常会面临对象实例过多的问题"。1.意图运用共享技术有效地
阅读全文
摘要:备忘录模式,在工作代码中,要么不用,要么经常用到。举个例子,程序员喜欢写代码,coding,coding,这个时候它的状态是很high,但是每隔一段时间总要去上一下厕所,状态是放松relax,上完测试归来后又恢复到high的状态,继续coding。这个过程对于身后的老板来说,它默认同意你离开去上厕所,他也希望你回来后恢复high的状态继续工作,但是你在这个过程中上厕所的这件事,他是不需要了解细节的,而且做为当事人你也不希望他了解你上厕所的细节吧,你只要回来后恢复激情high着继续工作,老板应该就不会挑你的刺。这就是备忘录模式。本文今天就Canvas的一个save(),restore()操作分析
阅读全文
摘要:模板方法,和单例模式是我认为GOF的23中最简单的两种模式。但是我个人对模板方法的经典思想特别推崇,虽然模板方法在大对数情况下并不被推荐使用,但是这种通过父类调用子类的方法,使用继承来改变算法的一部分,是面向对象的一种基本认识。打比方说父亲有很多理想,就行医救人吧,但是父亲医术不行,只能靠儿子,儿子长大后遵从父亲大志,春风拂面,妙手回春,实现了父亲的理想,儿子做的事情早在出生前就定下来了,是父亲之前久定好的模板。认识到模板方法的这种思想,父类可以让未知的子类去做它本身可能完成的不好或者根本完成不了的事情,对框架学习大有帮助。本文以View中的draw方法为例,展开分析。模板方法,Templat
阅读全文
摘要:单例模式,可以说是GOF的23种设计模式中最简单的一个。这个模式相对于其他几个模式比较独立,它只负责控制自己的实例化数量单一(而不是考虑为用户产生什么样的实例),很有意思,是一个感觉上很干净的模式,本人很喜欢这个模式。android中很多地方都用到了单例模式,本文以输入法管理者InputMethodManager为例,展开分析。单例模式,Singleton Pattern,能够以其特有的优势,替代系统中全局变量,应用非常广泛。1.意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。热门词汇:单例 唯一 私有构造2.结构android中有很多系统级别的全局变量,如时间,输入法,账户,状态栏
阅读全文
摘要:观察者模式,是一种非常常见的设计模式,在很多系统中随处可见,尤其是涉及到数据状态发生变化需要通知的情况下。本文以AbstractCursor为例子,展开分析。观察者模式,Observer Pattern,是一个很实用的模式,本人曾经接触到的各种平台以及曾经参与项目中打印模板解释器中都用到了此模式。1.意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。热门词汇:依赖 发布-订阅 事件 通知 更新 监听2.结构这是一个最简单的观察者模式,目标对象能够添加和删除观察者,当自己某种状态或者行为发生改变时,可通过notify通知注册的观察者进行更
阅读全文
摘要:Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在android UI设计,几乎所有的widget和布局类都依靠这两个类。组合模式,Composite Pattern,是一个非常巧妙的模式。几乎所有的面向对象系统都应用到了组合模式。1.意图将对象View和ViewGroup组合成树形结构以表示"部分-整体"的层次结构(View可以做为ViewGroup的一部分)。组合模式使得用户对单个对象View和组合对象ViewGroup的使用具有一致性。热点词汇: 部分-整体 容器-内容 树形结构 一致性 叶子 合成 安全性 透明
阅读全文
摘要:=======================2011-08-26==================================有时候,最难的是坚持;有时候缺少的是信念。=======================2011-08-07==================================从接触设计模式到如今大概4年左右的时间,一直都想有朝一日定要精通,坐于床头,侧望左右,设计模式的书买了7,8本了,也看了很多参考和视频,也用到了一些。但是今天我终于停下来,停下来梳理,停下来欣赏,也停下来反省,总之,我今天停下来了,是为了走的更好,走的更远。如果有幸我能够把这个系列写到23
阅读全文