上一页 1 2 3 4 5 6 ··· 9 下一页
摘要: 概述在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。结构图实现要点1.Interpreter模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易抽象为语法规则的问题”才适合使用Interpreter模式。2.使用Interpreter模式来 阅读全文
posted @ 2011-07-15 10:15 二锅头 阅读(1339) 评论(0) 推荐(0)
摘要: 概述在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。结构图角色说明:Memento(备忘录):保存Originator对象的内部状态(主动权在Originator),提供宽接口给Originator,提供窄接口给CareTaker。Originator(原发器):控制 阅读全文
posted @ 2011-07-14 09:49 二锅头 阅读(191) 评论(0) 推荐(0)
摘要: 述在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。意图用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。结构图实现要点1.在C#中可以适用delegate关联中介者和各同事之间的交互行为,这样各同事就不需要直接和中介者进行耦合。2.中介者模式和观察者模式的区别是,前者应用于多对多杂乱交互行为的 阅读全文
posted @ 2011-07-14 09:09 二锅头 阅读(376) 评论(0) 推荐(0)
摘要: 概述在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。[GOF《设计模式》]结构图角色说明:Subject(被观察的对象接口)规定ConcreteSubject的统一接口;每个Subject可以有多个Observer;ConcreteSubje 阅读全文
posted @ 2011-07-13 15:13 二锅头 阅读(209) 评论(0) 推荐(0)
摘要: 概述在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。意图提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。[GOF《设计模式》]结构图Iterator模式结构图如下:实现相 阅读全文
posted @ 2011-07-13 14:36 二锅头 阅读(165) 评论(0) 推荐(0)
摘要: 命令模式是将一类对象的功能操作进行抽象,一般来说,这些对象有相同的方法,所以这类对象有着类似的操作,我们通过抽象,就可以定义出一个命令对象,通过这样的方式,用户程序在使用的时候,只与该命令对象打交道,而不用与一类对象打交道,降低了耦合性,提高了程序设计的灵活性。 命令模式适应于一组对象他们的操作形式非常的类似,这个时候我们可以把对象的行为进行抽象,抽象成命令对象,实现解耦,下面来举例说明: 例如我这里要实现多数据的保存操作,例如支持SQLServer与Oracle数据库,还有Access数据库,那么假设我这里定义相关的CRUD方法如下:效果及实现要点1.Command模式的根本目的在于将“行为 阅读全文
posted @ 2011-07-13 12:46 二锅头 阅读(281) 评论(0) 推荐(0)
摘要: 概述变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好的提高代码复用?通过学习Template Method模式,您应该有一个新的认识。意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[-GOF《设计模式》]结构图实现要点1.Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。2.除了可 阅读全文
posted @ 2011-07-13 10:42 二锅头 阅读(194) 评论(0) 推荐(0)
摘要: 概述在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。意图为其他对象提供一种代理以控制对这个对象的访问。 通过上面的图片,我们可以看到,通过增加代理来解耦A与C之间的调用,这样可以封装原来C调用A的一些相关细节,转换成C直接调用B中封装后的代理方法,则等同于访问A。对于WebService的远程调用时,如果我们使用添加Web引用的方式,那么WebService会为我们自动生成代理类的,这个我这里就不 阅读全文
posted @ 2011-07-13 09:44 二锅头 阅读(227) 评论(0) 推荐(0)
摘要: 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?概述面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?意图运用共享技术有效地支持大量细粒度的对象。[GOF《设计模式》]结构图效果及实现要点1.面向对象很好的解决了抽象性的问题,但是作为一个运行在机器中的程序实体 阅读全文
posted @ 2011-07-13 09:07 二锅头 阅读(220) 评论(0) 推荐(0)
摘要: 概述在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade模式。意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF《设计模式》]示意图效果及实现要点1.Façade模式对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。2.Façade模式实现了子系统与客户之间的松耦合关系,而子系统内部的功 阅读全文
posted @ 2011-07-12 17:27 二锅头 阅读(307) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 ··· 9 下一页