
设计模式
scucj
这个作者很懒,什么都没留下…
展开
-
C# 设计模式 之 适配器模式(Adapter)
抽象地说,如果客户需要使用某个类的服务,而这项服务是这个类用一个不同的接口提供的,那么就可以使用适配器模式(Adapter)为客户提供一个期望的接口。 具体地说,现有的类已经提供了客户所需要的服务,但是方法的名称不相同,通过使用适配器模式(Adapter)为客户提供一个类,这个类包含客户需要的完成相同服务且方法名称相同的方法。 这里分两种情况: (1) 客户用接口定原创 2006-10-30 00:25:00 · 1821 阅读 · 0 评论 -
享元模式(Flyweight Pattern)
共享,即共享访问。如果一个客户改变了某个对象的状态,那么可能会一向所有访问这个对象的客户。当多个客户访问同一个对象时,为了避免客户之间相互影响,最简单最常用的办法就是对客户进行现在,使得客户不能对共享对象进行改变。 通过为一个共享对象创建一个职责,享元模式可以使多个客户共享一个对象。目的就是使用共享来有效地支持大量的细粒度对象。共享对象可以在多个上下文中使用,每原创 2007-12-05 00:09:00 · 1363 阅读 · 0 评论 -
状态模式(State Pattern)
一个对象的状态是这个对象属性值的一个组合,如果我们对一个对象的成员变量进行了赋值操作,或者调用了一个对象中的某个方法,这个对象的状态往往会发生变化。而与状态相关的逻辑可能分布在这个类的多个方法中。 我们引入一组新类,每个类代表一个不同的特定状态,然后将与状态相关的行为分配到这些新类中。换句话说,就是引入一组表示对象状态的类,然后把与状态相关的操作分配到这些表示状态的原创 2007-12-09 17:14:00 · 2079 阅读 · 0 评论 -
模板方法模式(Template Method)
模板方法模式的目的:在一个方法中定义一个算法,把算法的某些步骤进行抽象。这样可以把这些步骤从方法中移出,并在方法外部定义这些步骤,也可以用一个接口定义这些步骤,从而使其他类可以提供这些步骤。这样可以在不改变算法的结构而重新定义算法的某些特定的步骤。 排序是一个应用了模板方法模式的例子。通过改变排序算法的一个关键步骤,即对两个对象进行比较的步骤,就可以针对不同对象原创 2007-12-08 00:32:00 · 1524 阅读 · 0 评论 -
策略模式(Strategy Pattern)
一个策略是一个计划,或是一个方案。通过执行这个计划或是方案,我们可以完成某个任务。策略与算法相比,策略能够在更大的范围内提供可选方案。策略是一组方案,这些方案可以相互之间替换。 利用策略模式,我们可以把相互之间可替换的方案封装在一些具有共同接口的类中,从而使得他们可以相互替换。共同接口定义了策略的输入和输出,操作的实现在各个类中完成。通过应用策略模式可以把用于选择原创 2007-12-09 21:22:00 · 1945 阅读 · 0 评论 -
原型模式(Prototype Pattern)
通过一个给定的实例创建一个对象,与通过对一个类进行实例化构造新对象不同的是,通过拷贝一个现有的对象生成新的对象。利用原型模式可以不需要工厂方法类。特别是不同对象的类仅仅在属性具有区别,而行为并没有区别时候,通过拷贝一个现有的对象生成新的对象可以减少子类的数目。它与调用构造函数创建新对象的区别在于:拷贝对象一般包括了原有对象的某些状态信息。 模型模式允许动态的增加原创 2007-12-07 21:37:00 · 1978 阅读 · 0 评论 -
备忘录模式(Memento Pattern)
备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。[1] 备忘录模式(Memento Pattern)应用于保存和跟踪对象的状态,以便于必要的时候可以把对象恢复到以前的状态。备忘录模式可以为一个对象提供状态存储和状态恢复的手段。 一个备忘录是一个对象,这个对象保持了一些状态信息。原创 2007-12-11 20:58:00 · 1272 阅读 · 0 评论 -
解释器模式(Interpreter Pattern)
解释器模式就是定义语言的文法,并且建立一个解释器来解释该语言中的句子。 给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表 文法的命令类的等原创 2007-12-14 00:23:00 · 2117 阅读 · 0 评论 -
命令模式(Command Pattern)
命令模式可以在一个对象中封装一个请求,把方法调用作为对象进行管理,并在满足时序关系或是满足某些条件的情况下,传递这些对象,并且调用这些对象。在实际应用中将命令抽象成一个接口,所有的命令都实现这个接口,具体命令角色实现接口规定的方法.对象的请求者(Invoker)和命令对象是弱耦合关系, 和接收者(Reciever)都不过问命令的执行过程。命令模式可以作为模板方法的一个替代方案,同时原创 2007-12-12 20:39:00 · 1551 阅读 · 0 评论 -
装饰模式(Decorator Pattern)
为了扩展一个代码库,我们一般采用为代码库增加新的类和新的方法,通过使用继承的方式来扩展子类的功能。但是,有时候我们在程序运行时生成一个对象,希望动态地给这个对象添加一些新的行为,这就是使用到装饰模式! 利用解释器模式,我们可以生成一个可执行对象,根据其生成的方式,这个可执行对象具有多种行为。然而在某些情况下,我们只需要对对象的行为做微小的调整,并希望这些被调整过的原创 2007-12-15 23:33:00 · 1418 阅读 · 0 评论 -
访问者模式(Visitor Pattern)
我们需要扩展生成的行为与现有的对象模型并不一致,或者不修改层次结构中的类,就无法扩展层次结构的行为,这时可以使用访问者模式为对这个层次结构进行扩展提供支持。访问者模式的目的在于不改变一个层次结构中的类的情况下,我们可以为一个层次结构定义定义一个新的操作,扩展过程中无需访问原有的代码。 目的为了表示一个作用于某个对象结构中的各元素的操作,可以在不改变各元素的类的前提下定原创 2007-12-16 17:52:00 · 1467 阅读 · 0 评论 -
职责链模式
在这个层次结构中,每个对象都有一个对下一个对象的引用,这样形成一条链,一个对象要么完成某个操作,要么把请求传给链中的其他对象。客户并不知道哪个对象为其提供了服务。责任链模式有两部分构成:一是处理请求的接口,一个是具体处理的类。 职责链模式避免把一个请求的发送者和请求的接受者进行耦合.using System;using System.Collections.原创 2007-11-12 00:52:00 · 1160 阅读 · 0 评论 -
代理模式
代理模式对象通常提供了一个接口,这个接口与这个代理对象所代理的对象的接口一致。当其他对象向代理对象发出请求,代理对象将这些请求转发给自己所代理的底层对象,从而完成其相关的工作。 举三个例子: (1)比如在加载大型图象时,为了避免把大型图象加载到内存,可以让代理对象仅仅把需要的图象内容加载到内存中。 (2)例如Copyon-Write就是虚拟代理的一种,但需原创 2007-11-10 00:43:00 · 1201 阅读 · 0 评论 -
设计模式(Design Patterns)专题目录
设计模式是针对面向对象的设计过程中重复发生问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。GoF在其《Design Patterns》一书中提出了23种基本设计模式。设计模式通常描述了一组相互紧密作用的类与对象。设计模式使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。[1] 设计模式的四原创 2006-10-30 00:28:00 · 1673 阅读 · 0 评论 -
C# 设计模式--外观模式(Facade)
一个良好的面向对象应用程序应该是一个最小的类,这个类能够把其他可重用类的行为有效的组织起来。对一个子系统的类进行重构,直到每个类都有一个进行良好定义功能目标,所以代码易于维护。外观模式(Facade)的目的是提供一个接口,通过这个接口可以使一个子系统更容易使用。它(Facade)将客户的请求代理给适合的子系统对象。客户通过发送请求给(Facade)的方式与子系统通信。使用(Facade)原创 2006-11-09 00:22:00 · 3928 阅读 · 1 评论 -
C# 设计模式--合成模式(Composite)
Composite模式定义了单个对象和组合对象的类层次结构。(1)单个对象组合成复杂的组合对象,而多个组合对象又可以被组合成一个新的组合对象。其中,一个组合对象中的某些对象可能包容了其他对象。某些对象则表现单个基本对象,称为叶对象;某些对象代表一组对象,称为枝对象。叶对象可以组合成复杂的枝对象,而枝对象又可以被组合成新的枝对象,可以不断组合下去。 Composite模式使用户对单个对象和原创 2006-12-08 00:41:00 · 3072 阅读 · 0 评论 -
C# 设计模式 之 桥接模式
桥接模式关注如何设计抽象类! 主要目的是把一个抽象类与其抽象操作的实现进行分离。 抽象类处于类层次结构的顶层位置,它定义了抽象的操作集,层次结构中的某些子类都为抽象操作集提供了不同的实现,这些操作集在一个接口中,另外还有子类沿着另外的方向,整个设计就是需要使用桥接模式。简单的说,处于顶层位置的抽象类的继承出现多方向,需要使用桥接模式。using Sys原创 2007-09-17 23:31:00 · 1405 阅读 · 0 评论 -
C# 设计模式 之 抽象工厂模式
工厂方法模式在于需要根据条件来控制对哪个类进行实例化,而抽象工厂模式确定实例化的往往设计到多个类,目的是创建一组相关或者相互依赖的对象提供支持!重点就是在于处理一组相关或者相互依赖类! 举一个的经典实例,就是GUI工具箱。一个GUI工具箱就是一个对象,也是一个抽象工厂。GUI工具箱提供了各种GUI控件,并为它们提供了一个基本的东西,比如外观、颜色等。这样,当GUI控件原创 2007-09-23 01:12:00 · 3501 阅读 · 0 评论 -
C# 设计模式 之 工厂方法
为了对一个类进行实例化,通常使用这个类的构成函数,但是有时候出现这类情况:几个类实现了同一个接口,具有同样的操作、返回了同样的抽象类型,不知道该为哪个类型创建对象,因为需要根据条件来控制对哪个类进行实例化,并且此时类的数量可能增减,接口却是稳定的。我们需要工厂方法模式! 我们遇见一个.NET中的经典实例就是枚举器。Enumerator的 GetEnumerat原创 2007-09-23 00:13:00 · 1427 阅读 · 0 评论 -
C# 设计模式之生成器模式
我们一般为一个类提供构造函数,并利用这个构造函数完成对象的创建工作。当客户知道为哪个类创建实例,并知道构造函数的参数时(假设是用带参数的构造函数)。然而由于条件的现限制,是无法用通常的方式来构造对象的实例! 在进行对象构造之前,要逐步收集与构造相关的信息.那么创建对象的过程和对象的表现就应该分离开来。此时对象的表现是相对稳定的。 应用场景是当创建一个复杂的对象时,这原创 2007-09-24 23:42:00 · 1934 阅读 · 0 评论 -
C# 设计模式之单件模式
单件模式要求一个类有且仅有一个实例,同时提供一个全局的访问点。一般的解决方案是对一个单件对象进行延迟初始化,即当第一次使用这个对象的时候才对这个对象进行初始化!using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace SinglePattern.原创 2007-10-11 13:00:00 · 3156 阅读 · 0 评论 -
C# 设计模式之观察者模式
观察者模式的目的就是在对象之间定义一个一对多的依赖关系,从而当一个对象状态方式改变时,所有依赖这个对象的对象都能得到通知,并对上述改变做出反应! 比如对于一个对象,客户对其感兴趣的部分发生改变,这个对象应该通知客户。同时,对象中的哪些信息是客户感兴趣的呢?这个由客户来定义!using System;using System.Collections.Gene原创 2007-10-11 23:07:00 · 1606 阅读 · 0 评论 -
中介者模式
一组对象之间的交互非常复杂,同时,每个对象都需要了解本组对象中其他每个对象的情况,那么为一组对象之间提供一个中央权威就非常有意义。当相关对象的交互逻辑独立于对象的其他行为时,把职责进行集中也是非常有意义的。中介者模式就定义了一个对象,这个对象将其他对象的交互进行了封装。这样降低了对象之间的耦合程度,避免了对象之间的相互引用。结构图[1]如下:举例如下:using Sy原创 2007-11-06 23:28:00 · 1344 阅读 · 0 评论 -
迭代器模式(Iterator Pattern)
迭代器模式提供了一种顺序访问某个集合中各个元素的解决方案。迭代器模式的目的就是将遍历集合对象的行为抽象来,构成一个迭代器类,让它来完成遍历工作。我们将储存集合对象的数据结构称容器,迭代器的目的就是遍历容器。分离的目的在于为访问容器中的元素提供不同的迭代器,避免容器的数据结构过于复杂,这样的设计使得“迭代器”和“容器”都符合“单一职责原则”设计原则。 迭代器模式的优点是简原创 2007-12-17 00:13:00 · 1825 阅读 · 0 评论