程序亦非猿

Build Better Apps.

访问者模式

设计模式专题系列: 设计模式 访问者模式当你想要为一个对象的组合(组合模式)增加新的能力,且封装并不重要时,就使用访问者模式。 用途: 当采用访问者模式的时候,就会打破组合类的封装。 优点: 允许你对组合结构加入新的操作,而无需改变结构本身。 想要加入新的操作,相对容易。 访问者所进行的操作,其代码是集中在一起的。 缺点: 因为游走的功能牵涉其中,......

原型模式

设计模式专题系列: 设计模式 原型模式当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式(Prototype Pattern)。 原型模式允许你通过复制现有的实例来创建新的实例(在Java中,这通常意味着使用clone()方法,或者反序列化)。 原型模式的重点在于,客户端的代码在不知道要实例化何种特定类的情况下,可以制造出新的实例。(?不太理解) 用途: 在一个复杂的类层......

备忘录模式

设计模式专题系列: 设计模式 备忘录模式当你需要让对象返回之前的状态时(例如,你的用户请求“撤销”),就使用备忘录模式。 备忘录的目标: 储存系统关键对象的重要状态。 维护关键对象的封装。 咦,那Activity、Fragment、View的 onSaveInstanceState 不就是备忘录模式吗? 用途: 备忘录用于存储状态。 优点: 将被储存的状态放在外面,不要......

中介者模式

设计模式专题系列: 设计模式 中介者模式使用中介者模式来集中相关对象之间复杂的沟通和控制方式。 每个对象都会在自己的状态改变时,告诉中介者 每个对象都会对中介者锁发出的请求作出回应 没有中介者的情况之下,所有的对象都需要认识其他对象,也即对象之间是紧耦合的.当有了中介者后,对象之间不需要认识,只需要跟中介者打交道,这样一来对象之间就被解耦了. 中介者包含了整个系统的控制逻辑. ......

解释器模式

设计模式专题系列: 设计模式 解释器模式使用解释器模式为语言创建解释器. 用途: 当你需要实现一个简单的语言时,使用解释器. 当你有一个简单的语法,而且简单比效率更重要时,使用解释器. 可以处理脚本语言和编程语言. 可以处理脚本语言和编程语言. 优点: 将每一个语法规则表示成一个类,方便于实现语言. 因为语法由许多类表示,所以你可以轻......

蝇量模式

设计模式专题系列: 设计模式 蝇量模式如果想让某个类的实例能用来提供许多”虚拟实例”,就使用蝇量模式。 用途: 当一个类有许多的实例,而这些实例能被同一个方法控制的时候,我们就可以使用蝇量模式. 优点: 减少运行时对象实例的个数,节省内存. 将许多”虚拟”对象的状态集中管理. 缺点: 蝇量模式的缺点在于,一旦你实现了它,那么单个的逻辑实例无法拥有独立而不同的行为.......

责任链模式

设计模式专题系列: 设计模式 责任链模式当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式. 通过责任链模式,可以为某个请求创建一个对象链.每个对象依序检查此请求,并对其进行处理,或者将它传给链中的下一个对象. 拿Android来说,View的 onTouch 等方法都是使用了责任链模式. 用途: 经常被使用在窗口系统中,处理鼠标和键盘之类的事件(在Andr......

生成器模式

设计模式专题系列: 设计模式 生成器模式使用生成器模式封装一个产品的构造过程,并允许按步骤构造。 在Android中比较常见了,比如 Dialog,,另外在EffectiveJava的笔记中也有提到,就不多说了. 用途: 经常被用来创建组合结构. 优点: 将一个复杂对象的创建过程封装起来. 允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个步骤的工厂模式不同)......

桥接模式

设计模式专题系列: 设计模式 桥接模式桥接模式通过 将实现和抽象放在两个不同的类层次中而使它们可以独立改变。 使用桥接模式不只改变你的实现,也改变你的抽象。 上code: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556......

模板方法模式

设计模式专题系列: 设计模式 模板方法模式模板方法模式: 在一个方法中定义一个算法的估价,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变方法结构的情况下,重新定义算法的某些步骤。 具体来说: 创建一个算法的模板,这个模板其实就是第一个方法(需要定义为final)。而这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这样可以确保算法结构保持不变,同时......

状态模式

设计模式专题系列: 设计模式 状态模式状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改它的类。 状态模式把每个状态都独立成类,并将动作委托到代表当前状态的对象。 Context需要持有 所有状态的一个实例(弹性的代价),通过不同状态来切换状态对象,把行为委托给当前状态的对象,客户端不知道Context内部的状态,跟策略模式不同,策略模式需要客户端去指定策略,......

代理模式

设计模式专题系列: 设计模式 代理模式 这一章节的内容较多,笔记比较乱,还是看书好些。 代理模式: 为另一个对象提供一个替身或占位符以控制对这个对象的访问。 所谓代理(proxy),就是代表某个真实的对象。 代理要做的就是:控制和管理访问(控制对象访问) why? 是因为Client不知道如何和远程对象沟通。从某方面来看,远程代理控制访问,可以帮忙处理一些细节(比如网络,I......

观察者模式

设计模式专题系列: 设计模式 观察者模式观察者模式:定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会受到通知,并自动更新。 出版者(Subject) + 订阅者(Observer) = 观察者模式 观察者依赖于主题。 观察者模式提供了一种对象设计,让主题和观察者之间松耦合。 观察者与主题之间依赖于接口,主题不需要知道观察者的具体实现 可......

迭代器模式

设计模式专题系列: 设计模式 迭代器模式迭代器模式(Iterator): 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 迭代器模式服务『集合』,为了更好地管理集合。 所谓集合(Collection)就是是,一群对象,可以放在数组、堆栈、列表、散列表等。集合有时候也被称为『聚合』(aggregate)。 迭代器的意义与优势 我们不需要知道一个集合到底是数......

工厂模式

设计模式专题系列: 设计模式 工厂模式工厂模式分两种模式: 工厂方法 抽象工厂 简单工厂使用new Xxx()创建对象非常脆弱,缺乏弹性,耦合度高。 当具体类需要新增或删除的时候,就必须修改这段代码,非常容易出错,难以维护和更新。 所以需要把创建对象的方法封装起来,用“工厂”来负责创建对象。 定义Factory: 使用: 看起来可能只是把代码挪到了另外一个地方......

外观模式

设计模式专题系列: 设计模式 外观模式(Facade)外观模式: 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 或者说:将一个类或数个类的复杂的一切都隐藏在背后,只显露出一个感觉美好的外观。 外观模式创建一个接口简化而统一的类,用来包装子系统中的一个或者多个复杂的类,而暴露给客户端的是非常简单的接口,让 客户端和子系统解耦。 ......

装饰者模式

设计模式专题系列: 设计模式 装饰者模式装饰者模式: 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 装饰者模式可以给类 动态地添加功能,而不需要修改已经存在的类,类似一个Wrapper。 装饰者有弹性,非常符合 开闭原则 特点 装饰者和被装饰者对象拥有相同的超类型 你可以用一个或多个装饰者包装一个对象 既然装饰者和被装饰者对象拥有相......

复合模式

设计模式专题系列: 设计模式 复合模式复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。 复合模式在一个解决方案中结合两个或多个模式,已解决一般或重复发生的问题。 MVC就是一个复合模式。(书中把MVC夸得不行不行的-0-~,称它为 复合模式之王!) 多的不说,截一张示意图: ...

组合模式

设计模式专题系列: 设计模式 组合模式组合(Composite)模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 组合模式比较复杂一些,跟迭代器模式配合威力强大。 树形结构: 带子元素的元素称为 『节点』(node) 没有子元素的元素称为 『叶节点』(leaf) 包含其他组件的组件为『组合对象』,没有包......

适配器模式

设计模式专题系列: 设计模式 适配器模式(Adapter)适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 适配器非常形象的图: 非常形象的模式,就像生活中的手机充电器,电脑的电源适配器一样。 使用场景当想使用一个已经存在的类,但是不匹配需求接口的时候,可以考虑使用适配器模式来适配,如果有需要还可以做 双向适配,来完成适......