2012年2月23日
摘要: 1.迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。2.当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式。另外,如果需要对聚集有多种方式遍历是,也可以考虑用迭代器模式。3.迭代器模式(Iterator)结构图 4.迭代器模式(Iterator)就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。 阅读全文
posted @ 2012-02-23 22:59 qinzj 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 1.组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。2.组合模式(Composite)结构图 阅读全文
posted @ 2012-02-23 22:58 qinzj 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 1.适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。2.系统的数据和行为都正确,但接口不符合时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望用一些现存的类,但是接口又与复用环境要求不一致的情况。3.适配器模式结构图 阅读全文
posted @ 2012-02-23 22:56 qinzj 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 1.备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。2.备忘录模式(Memento)结构图 3.备忘录模式的缺点:如果状态数据很大很多,那么在资源消耗上,备忘录对象会非常耗内存。 阅读全文
posted @ 2012-02-23 22:56 qinzj 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 1.状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。2.状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。3.状态模式(State)结构图 4.状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。5.当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。 阅读全文
posted @ 2012-02-23 22:54 qinzj 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 1.抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。2.抽象工厂模式(Abstract Factory)结构图 3.抽象工厂模式的好处是易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。另外,抽象工厂模式让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。4.反射:Assembly.Load(“程序集名称”).CreateInstance 阅读全文
posted @ 2012-02-23 22:53 qinzj 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 1.观察者模式(Observer)又叫做发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2.观察者模式(Observer)结构图 3.当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象有待改变时应该考虑使用观察者模式。或者当一个抽象模型有两个方面,其中一方面依赖于另一方面,这时用观察者模式可以将两者封装在独立的对象中使用它们各自独立地改变和复用。4.观察者模式所作的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体 阅读全文
posted @ 2012-02-23 22:51 qinzj 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 1.建造者模式(Builder),又叫生成器模式,它是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的比奥斯。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需知道了。2.建造者模式(Builder)结构图3.建造者模式主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。4.建造者模式的好处是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。 阅读全文
posted @ 2012-02-23 22:50 qinzj 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 1.外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2.外观模式(Facade)结构图 3.何时使用外观模式? 首先,在设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。 其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加外观Faca 阅读全文
posted @ 2012-02-23 22:49 qinzj 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 1.迪米特法则(LoD),也叫最少知识原则。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。2.迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。3.迪米特法则的根本思想是强调了类之间的松耦合。4.在程序设计时,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。 阅读全文
posted @ 2012-02-23 22:48 qinzj 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 1.当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。2.模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。3.模板方法模式(TemplateMethod)结构图 4.模板方法模式提供了一个很好的代码复用平台,他是通过把不变行为搬移到超类,去除子类中的重复代码来体现他的优势。 阅读全文
posted @ 2012-02-23 22:47 qinzj 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 1.原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。2.原型模式(Prototype)结构图 3.原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。4.对于.Net而言,那个原型抽象类Prototype是用不着的,因为克隆实在是太常用了,所以.Net在System命名空间中提供了ICloneable接口,其中就是唯一的一个方法Clone(),这样就只需要实现这个接口就可以完成原型模式了。5.一般在初始化的信息不发生变化的情况下,克隆是最好的办法,这既隐藏了对象创建的细节,又对性能是大大的提高。它等于是不用重新初始化 阅读全文
posted @ 2012-02-23 22:45 qinzj 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 1.工厂方法(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。2.工厂方法(Factory Method)结构图 3.工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来改工厂类,而现在是修改客户端! 阅读全文
posted @ 2012-02-23 22:44 qinzj 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 1.代理模式(proxy),为其他对象提供一种代理以控制对这个对象的访问。2.代理模式(Proxy)结构图 3.代理模式使用的场合:①远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。如WebService在.NET中的应用。②虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。③安全代理,是用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。④智能指引,是指当调用真实的对象时,代理处理另外一些事。 阅读全文
posted @ 2012-02-23 22:42 qinzj 阅读(168) 评论(0) 推荐(0) 编辑