摘要: 概述在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。[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)