
设计模式
clq9761
这个作者很懒,什么都没留下…
展开
-
适配器模式
适配器模式:1.将一个类的接口转换成客户希望的另外一个接口。2. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。3. 适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致情况。 /** * 客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口 */public class Targer { // 普通的...原创 2010-08-27 21:41:20 · 110 阅读 · 0 评论 -
中介者模式
中介者模式:用一个中介对象来封装一系列的对象交互,从而降低这些对象间的耦合性并且可以独立 地改变对象间的交互关系。中介者使各对象不需要显示地相互引用,从而使其藕合松散, 而且可以独立地改变它们之间的交互。 1.中介者模式很容易在系统中应用,也很容易在系统中误用,当系统中出现了"多对多"交互复杂 的对象群时,不要...原创 2011-06-16 10:10:50 · 106 阅读 · 0 评论 -
备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 这样以后就可将该对象恢复到原先保存的状态。 优点: 1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取, 这时使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 2...原创 2011-06-16 10:58:01 · 89 阅读 · 0 评论 -
观察者模式
观察者模式(发布-订阅模式):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 当一个对象的改变需同时改变其它对象的时候,而且它不知道具体有多少对象有待改变时,应考虑使用观察者模式。 优点: 第一、观察者模式在被观察...原创 2011-06-17 10:46:20 · 119 阅读 · 0 评论 -
原型模式
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 即从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。 浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所用的对其它对象的引用都仍然指向原来的对象 深复制:把引用对象的变量指向复制过的新对象,而不是原来被引用的对象。 /** * 原型接...原创 2011-06-22 14:36:23 · 90 阅读 · 0 评论 -
代理模式
代理模式:为其它对象提供一种代理,以控制对这个对象的访问。 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在 客户端和目标对象之间起到中介的作用。 /** * Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何 * 使用RealSubject的地方都可以使用Proxy. * */...原创 2011-06-22 15:14:32 · 89 阅读 · 0 评论 -
单例模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 /** * 单例类 */public class Singleton { private static Singleton instance = null; // 构造方法让其private,禁止外界利用new创建此类实例的可能 // 所有类都有构造方法,不编码则系统默认生成空的...原创 2011-06-22 15:30:46 · 84 阅读 · 0 评论 -
状态模式
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 主要解决的是当控制一个对象状态转换的条件表达式过于复杂时,把状态的判断 逻辑转移到表示不同状态的 一系列类当中,可以把复杂的判断逻辑简化。如果状态判断很简单,就没必要用状态模式。 适用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状...原创 2011-06-22 16:34:51 · 76 阅读 · 0 评论 -
策略模式
策略模式: 定义了算法家族,分别封装起来,让它们之间可以互相替换。 策略模式让算法独立于使用它的客户而独立变化,此模式让算法的变化,不会影响到使用算法的客户. 应用场景: 1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。 2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。 3、 对...原创 2011-06-23 10:29:18 · 91 阅读 · 0 评论 -
模板方法模式
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤迟到到子类中。 要点: 1.模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。 2.模板方法提供了一个很好的代码复用平台,通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。 3.模板方法是代码复用的一项基本的技术,在类库中尤其重要。 它遵循“抽象类应当拥有尽可能多的行为,应当拥有尽可能少的...原创 2011-06-23 11:16:10 · 96 阅读 · 0 评论 -
访问者模式
访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的 前提下定义作用于这些元素的新操作。 即可以在不修改已有程序结构的前提下,通过添加额外的"访问者"来完成对已有代码功能的提升。 要点: 1.访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的 藕合解脱开,使得...原创 2011-06-23 16:31:38 · 121 阅读 · 0 评论 -
迭代器模式
迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 1.当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历时,就应该考虑用迭代器模式。 2.当需要对聚集对象有多种遍历方式时,可以考虑用迭代器模式。 3.迭代器模式在访问数组,集合,列表等数据时,尤其是数据库数据操作时,是非常普遍的应用, 所以各种高级语言 都对它进行了封装,反而给人感觉此模式本...原创 2011-06-15 11:17:10 · 118 阅读 · 0 评论 -
解释器模式
解释器模式:给定一个语言,定义它的文法的一种表示。并定义一个解释器,这个解释器使用该表示来解释 语言中的句子。1.如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。 这样就可以构造一个解释器,该解释器通过解释这些句子来解决该问题。 2.当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽...原创 2011-06-15 10:44:05 · 90 阅读 · 0 评论 -
建造者模式
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 1. Builder:建造者抽象接口类,为创建一个产品对象的各个部件指定的抽象接口。 2. ConcreteBuilder:具体建造者,实现Builder接口,构造和装配各个部件。 3. Product:产品类,具体的产品角色 4. Director:指挥者类,构建一个使用Builder接口的对象 ...原创 2010-08-29 21:38:26 · 101 阅读 · 0 评论 -
组合模式
组合模式:1. 将对象组合成树形结构以表示'部分-整体'的层次结构。2. 组合模式使得用户对单个对象和组合对象的使用具有一致性。/** * 组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认形为。 * 声明一个接口用于访问和管理Component的子部件。 * */public abstract class Component { private...原创 2010-08-31 21:41:19 · 86 阅读 · 0 评论 -
装饰模式
装饰模式:1. 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。2. 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。 /** * Component定义一个对象的接口,可以给这些对象动态地添加职责。 * */public abstract class Component { ...原创 2010-09-01 21:35:37 · 114 阅读 · 0 评论 -
职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的藕合关系。 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 1.当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。 2.接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简 化...原创 2011-04-20 21:23:38 · 108 阅读 · 0 评论 -
桥接模式
桥接模式:将抽象部分与他的实现部分分离,使它们都可以独立地变化。 这里的实现指的是抽象类和它的派生类用来实现自己的对象。1.实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化, 减少它们之间的藕合。2.在桥接模式中的桥接是单向的,也就是只能是抽象部分的对象去使用具体实现部分的对象, 而不能反过来,也就是个单向桥。3...原创 2011-04-20 21:24:05 · 106 阅读 · 0 评论 -
命令模式
命令模式:将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤消的操作。 优点:1.能较容易地设计一个命令队列。 2.在需要的情况下,可以较容易地将命令记入日志 3.允许接收请求的一方决定是否要否决请求。 4.可以容易地实现对请求的撤消和重做。 ...原创 2011-04-21 17:40:41 · 127 阅读 · 0 评论 -
外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口, 这个接口使得这一子系统更加容易使用。 1. 外观模式的主要思想是将复杂的细粒度的对象服务包装成简单的易使用的粗粒度的功能服务.2. 在分布式应用中,通过远程调用服务,通过外观模式降低应用程序与服务的交互次数, 同时可以降低应用程序的复杂性。/** * 子系统的...原创 2011-06-13 15:08:30 · 85 阅读 · 0 评论 -
简单工厂与工厂方法模式
简单工厂模式:由一个工厂对象决定创建出哪一种产品类的实例。 1.简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一。2.优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该 创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来, 仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如...原创 2011-06-13 16:38:32 · 97 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提 供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。 与工厂方法模式的区别: 抽象工厂模式: 1.多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 ...原创 2011-06-14 10:42:12 · 88 阅读 · 0 评论 -
享元模式
享元模式:运用共享技术有效地支持大量细粒度的对象。 1.享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生成大量细粒度的类实例来表示数据。 如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够受大幅度地减少需要实例化的类的数量, 如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。 2.如果一个应用程序...原创 2011-06-14 11:22:29 · 97 阅读 · 0 评论 -
设计模式的一些相关原则
面向对象的三大特性:封装,继承和多态。 面向对象的四大好处:可维护性,可扩展性,可复用性和灵活性好。 设计模式的原则: 1.单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些 职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其它职责的能力。这种耦合会 ...原创 2011-06-23 17:01:23 · 190 阅读 · 0 评论