随笔分类 -  设计模式

.net 设计模式
Interpreter解释器(行为型模式)
摘要:动机:  在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。  在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图:  给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。  出自:《设计模式》GoFInter... 阅读全文

posted @ 2006-08-22 13:58 walker 阅读(257) 评论(0) 推荐(0)

Command命令(行为型模式)
摘要:动机:  在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合--比如需要对行为进行“记录、撤销/重做(Undo/Redo)、事务”等处理,这种无法抵御变化的紧耦合是不合适的。  在这种情况下,如何将“行为请求者”与“行为实现解耦?将一... 阅读全文

posted @ 2006-08-22 13:57 walker 阅读(198) 评论(0) 推荐(0)

TemplateMethod模板方法(行为型模式)
摘要:动机:  在软件构建的过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。  如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求?意图:  定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义... 阅读全文

posted @ 2006-08-22 13:56 walker 阅读(108) 评论(0) 推荐(0)

Proxy代理(结构型模式)
摘要:动机:  在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。  如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。意图:  为其他对象提供一种代理以控制对这个对象的访问。  出自:《设计模式》GoFProxy模式的几个要点:  1、... 阅读全文

posted @ 2006-08-22 13:55 walker 阅读(141) 评论(0) 推荐(0)

Flyweight享元(结构型模式)
摘要:动机:  采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价--主要指内存需求方面的代价。  如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?  意图:  运用共享技术有效地支持大量细粒度的对象。  出自:《设计模式》GoFFlyweight模式的几个要点:  1、面向对象很好地解决了抽象性的问题,但是作为一个运行在... 阅读全文

posted @ 2006-08-18 13:56 walker 阅读(150) 评论(0) 推荐(0)

Facade外观(结构型模式)
摘要:动机:  如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化的内部子系统的变化之间的依赖相互解耦?意图:  为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。  出自:《设计模式》GoFFacade模式的几个要点:  1、从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说... 阅读全文

posted @ 2006-08-18 13:36 walker 阅读(187) 评论(0) 推荐(0)

Decorator装饰(结构型模式)
摘要:动机:  如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀的问题?从而使得任何“功能扩展变化”所导致的影响降为最低?意图:  动态地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。  出自:《设计模式》GoFDecorator模式的几个要点:  ... 阅读全文

posted @ 2006-08-18 11:28 walker 阅读(176) 评论(0) 推荐(0)

Composite组合(结构型模式)
摘要:动机:  客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将客户代码的频繁变化,带来了代码的维护性差、扩展性差等弊端。  如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?意图:  将对象组合成结构以表示“部分-整体”的层... 阅读全文

posted @ 2006-08-18 09:42 walker 阅读(195) 评论(0) 推荐(0)

Singleton单件(创建型模式)
摘要:单件模式要求一个类有且仅有一个实例. Singleon类: 1using System; 2 3namespace Singleton 4{ 5 /**//// 6 /// Singleton 的摘要说明。 7 /// 8 public class Singleton 9 {10 11 private static Singleto... 阅读全文

posted @ 2006-08-17 17:17 walker 阅读(140) 评论(0) 推荐(0)

Bridge桥接(结构型模式)
摘要:动机: 当一个对象有了两个变化的维度,如何应对这种“多维度的变化”?如何利用面向对象技术来使得这个对象类型可以轻松沿着多个方向变化,而不引入额外的复杂度?意图: 将抽象部分与实现部分分离,使它们都可以独立地变化。 出自:《设计模式》GoF Bridge模式的几个要点: 1、Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象(Tank的型号)和实现(不现的平... 阅读全文

posted @ 2006-08-17 16:40 walker 阅读(219) 评论(0) 推荐(0)

Adapter适配器(结构型模式)
摘要:动机: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?意图: 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 出自:《设计模式》GoFAd... 阅读全文

posted @ 2006-08-17 15:10 walker 阅读(182) 评论(0) 推荐(0)

Prototype原型(创建型模式)
摘要:动机: 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?意图: 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 出自:《设计模式》GoF... 阅读全文

posted @ 2006-08-17 14:44 walker 阅读(166) 评论(0) 推荐(0)

Builder生成器(创建型模式)
摘要:动机: 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的了对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却欲相对稳定。 如何应对这种变化?如何提供一种“封闭机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?意图: 将一个复杂对象的构建与其表示相分离,使得同样的... 阅读全文

posted @ 2006-08-17 14:17 walker 阅读(185) 评论(0) 推荐(0)

AbstractFactory抽象工厂(创建型模式)
摘要:动机: 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客房程序和这种“多系列具体对象创建工作”的支耦合?意图: 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。 出自:《设计模式》GoFAbstract... 阅读全文

posted @ 2006-08-17 13:19 walker 阅读(240) 评论(0) 推荐(0)

FactoryMethod工厂方法(创建型模式)
摘要:最近看了李建宗老师的面向对象的设计模式的课程。我把里面的代码记录了下来以供大家参考。其中有的地方我整理了一下,可能有的地方和课程里的不一样。动机: 在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。 如何应对这种变化?如何提供一种“封闭机制”来隔离出“这个易变对象”的变化,从而保持系统中“其他依赖该对象”不随着需求改变而... 阅读全文

posted @ 2006-08-16 17:43 walker 阅读(224) 评论(0) 推荐(0)

导航