设计模式
文章平均质量分 78
leehao_vip
这个作者很懒,什么都没留下…
展开
-
设计模式笔记(二)——简单工厂模式
using System;using System.Collections.Generic;/** * 简单工厂模式 */namespace StuDesignMode.SimpleFactory{ abstract class AbsOperation { public double NumA { get; set原创 2008-10-24 17:49:00 · 473 阅读 · 0 评论 -
设计模式笔记(十六) —— 迭代器模式
迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 使用场合:一个聚集对象,不管这些对象是什么的都需要遍历的时候,你就需要考虑迭代器模式。迭代器模式在访问数组、集合、列表数据时,尤其是数据库操作时,是非常普遍的应用,但是由于它太普遍了,所以各种高级语言都对它进行了封装,所以反而给人的感觉此模式反而不太常用。 using Syst原创 2008-10-27 16:08:00 · 416 阅读 · 0 评论 -
设计模式笔记(十八) —— 桥接模式
桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都可以独立变化。什么叫抽象与它的实现分离,这并不是说,让抽象类与派生类分离,因为这里没有任何意义,实现指的是抽象类和它的派生类用来实现自己的对象。 using System;using System.Collections.Generic;/** * 桥接模式(Bridge):将抽象部分与它的实现部分分离,使原创 2008-10-27 16:14:00 · 459 阅读 · 0 评论 -
设计模式笔记(十九) —— 命令模式
命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请示排队或记录请求日志,以及支持可撤消的操作。 优点:第一,它能够较容易的设计一个命令队列;第二,在需要的情况下,可以较容易地将命令记入日志;第三,允许接收请求的一方是否要否决请求。第四,可以容易地实现对请求的撤消和重做;第五,由于加进新的具体命令类不影响其它的类,因此增加新的具体命令类很容易。原创 2008-10-27 16:16:00 · 489 阅读 · 0 评论 -
设计模式笔记(二十一) —— 中介者模式
中介者模式(Mediator):用一个中介者对象来封装一系列的对象交互。中介者对象使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了“多对多”交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。 优点:Mediator的出现减少了各个Colleague的耦合,便使原创 2008-10-27 16:22:00 · 667 阅读 · 0 评论 -
设计模式笔记(二十四) —— 访问者模式
访问者模式(Visitor):表示一个作用于某对象结构中的各种元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间的耦合解脱开,便得操作集合可以相对自由地演化。访问者模式的目的是要把处理从数据结构分离出来。有比较稳定的数据结构,又易于变化的算法的话,使用访问者模式就是比较合适的,因为访问原创 2008-10-27 16:34:00 · 956 阅读 · 0 评论 -
设计模式笔记(四) —— 装饰模式
装饰模式(Decorator):装饰模式是为已有功能动态的添加更多功能的一种方式。using System;namespace StuDesignMode.Decorator{ public class AbsCustomer { public string Name { get;原创 2008-10-27 15:19:00 · 426 阅读 · 0 评论 -
设计模式笔记(六) —— 工厂方法模式
工厂方法模式(FactoryMethod):实现时由客户端需要决定实例化哪一个工厂来实现运算类。using System;namespace StuDesignMode.FactoryMethod{ abstract class AbsOperation { public double NumA { get; set; }原创 2008-10-27 15:32:00 · 545 阅读 · 0 评论 -
设计模式笔记(八) —— 外观模式
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。 使用场合: 第一:在设计初期阶段,应该有意识的将不同的两个层分离,层与层之间建立外观(Facade) 第二:在开发阶段,子系统因为不断的重构演化而变得越来越复杂,增加外观可以提供一个简单的接口,减少它们之间的依赖。 第三,在维护一个遗留的原创 2008-10-27 15:39:00 · 420 阅读 · 0 评论 -
设计模式笔记(十三) —— 备忘录模式
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象。这样以后就可将该对象恢复到原先保存的状态。 使用场合:备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。 using System;/**原创 2008-10-27 15:59:00 · 418 阅读 · 0 评论 -
设计模式笔记(十) —— 观察者模式
观察者模式(Observer):又叫发布/订阅模式(Publish/Subscribe) 它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对者,使它能够自动更新自己。 使用场合: 当一个对象的改变需要改变其它对象的时候,而且需要同时改变其它对象的时候,应该考虑使用观察者模式。 从这种模式衍生原创 2008-10-27 15:48:00 · 460 阅读 · 0 评论 -
设计模式笔记(九) —— 建造者模式
建造者模式(Builder):Builder是为创建一个Product对象的各个部件指定的抽象接口; ConcreteBuilder是具体创建者,构造和装配各个部件。 Director是构造一个使用Builder接口的对象。 使用场合:主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常都是稳定的,但对象内部的构造通常面临着复杂的变化。建造者的好处是使得建造原创 2008-10-27 15:42:00 · 381 阅读 · 0 评论 -
设计模式笔记(二十二) —— 享元模式
享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。享元模式可以避免大量相似类的开销。在程序设计中,有时需要生成大量细粒度的类实现来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的有时就能够大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。 using System;原创 2008-10-27 16:29:00 · 517 阅读 · 0 评论 -
设计模式笔记(一)
学习了两周的设计模式,感觉《大话设计模式》这本书确实不错,记了点笔记,方便以后查看。 单一职责原则:如果一个类承担的职责承过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其它职责的能力,这种耦合会倒置脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 开放-封闭原则:对扩展开放(Open for extension),对更改封闭(Closed原创 2008-10-24 17:39:00 · 561 阅读 · 0 评论 -
设计模式笔记(三)—— 策略模式
策略模式:定义的算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。策略模式是一种定义一种算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有算法,减少了各种算法类与使用算法类之间的耦合。优点:第一,策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的原创 2008-10-24 17:54:00 · 415 阅读 · 0 评论 -
设计模式笔记(五) —— 代理模式
代理模式(Proxy):为其它对角提供一种代理以控制对这个对象的访问。 使用场合有以下几种: 第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个存在不同地址空间的事实。(WebService) 第二:虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的对象。 第三:安全代理,用来控制真实对象的访问权限。 第四:智能指引,是指调用原创 2008-10-27 15:27:00 · 501 阅读 · 0 评论 -
设计模式笔记(七) —— 原型模式
原型模式(Prototype):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另一个可以定制的对象,而且不需要知道任何创建的细节。 浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的其它的对象的引用都仍然指向原来的对象。 深复制:把引用对象的变量指向复制过来的新对象,而不是原有对象的引用。using Syst原创 2008-10-27 15:36:00 · 476 阅读 · 0 评论 -
设计模式笔记(十一) —— 状态模式
状态模式(State):当一个内在对象的状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态改变的条件表达式过于复杂的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑化。好处是将与特定状态的行为局部化,并且将不同状态的行为分割开来。将特定的状态相关行为都放入一个对象中,由于所有与状态相关的代码都存在某个ConcreteState原创 2008-10-27 15:52:00 · 435 阅读 · 0 评论 -
设计模式笔记(十二) —— 适配器模式
适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。 使用场合:在双方都不太容易修改的时候再使用适配器模式适配。 using System;/** * 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起原创 2008-10-27 15:55:00 · 417 阅读 · 0 评论 -
设计模式笔记(十五) —— 模板方法模式
模板方法模式(TemplateMethod):定义一个操作中的算法骨架,而将一些算法延迟到子类中。模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。模板方法就是通过把不变行为搬移到超类,去掉子类中的重复代码来体现它的优势。模板方法提供了一个很好的代码复用平台。 using System;namespace StuDesignMode.TemplateMetho原创 2008-10-27 16:06:00 · 517 阅读 · 0 评论 -
设计模式笔记(二十三) —— 解释器模式
解释器模式(Interpreter):给定语言,定义它的语法的一种表示,并定义一个解释,这个解释器使用该表示来解释语言中的句子。如果一种特定类型的问题发生的效率足够高,那么可能就值得将该问题的各个问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 using System;using System.Collections.Ge原创 2008-10-27 16:31:00 · 534 阅读 · 0 评论 -
设计模式笔记(二十) —— 职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 优点:当客户提交一个请求时,请求是沿链传递直到有一个ConcreteHandler对象负责处理它。这就使得接收者和发送者都没有对方的明确信息,且链中的对象自己也不知道链的结构,结果是职责原创 2008-10-27 16:19:00 · 643 阅读 · 0 评论 -
设计模式笔记(十四) —— 组合模式
组合模式(Composite):将对象组合成树形结构以表示“部分——整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。透明方式:也就是说在Component中声明所有用来管理子对象的方法,其中包括Add、Remove等。这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶节点和枝节点对于外界没有区别,它们具备完全一致的接口。但是问题也很明显原创 2008-10-27 16:02:00 · 446 阅读 · 0 评论