随笔分类 -  設計模式

GOF
职责链(Chain of Responsibility)模式
摘要:设计模式(17)-Chain of Responsibility Pattern 分类: 设计模式 2006-11-10 20:43 177人阅读 评论(0) 收藏 举报 行为模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为模式不仅仅是关于类和对象的,而且是关于它们之间的相互作用的。行为模式分为类的行为模式和对象的行为模式两种。类的行为模式:类的行为模式使用继承关系在几个类之问分配行为。 对象的行为模式:对象的行为模式则使用对象的聚合来分配行为。在后面将要介绍的行为模式包括以下几种:Chain of Resp.(责任链模式)A way of pass 阅读全文

posted @ 2011-09-08 15:50 Mayvar 阅读(333) 评论(0) 推荐(0) 编辑

解释器模式(Interpreter Pattern)
摘要:Net设计模式实例之解释器模式(Interpreter Pattern) 一、解释器模式简介(Brief Introduction)解释器模式(Interpreter Pattern),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。使用了解释器模式,可以很容易地改变和扩展文法,因为该模式使用类来表示文法规则,可以使用继承来改变或扩展该文法。也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类容易直接编写。二、解决的问题(What To Solve)如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述 阅读全文

posted @ 2011-09-08 15:44 Mayvar 阅读(880) 评论(0) 推荐(0) 编辑

代器模式(Iterator Pattern)
摘要:Net设计模式实例之迭代器模式(Iterator Pattern) 一、迭代器模式简介(Brief Introduction)迭代器模式(Iterator Pattern),提供一种方法顺序访问一个聚合对象中元素,而不暴露改集合对象的内部表示。Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.二、解决的问题(What To Solve)当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,应该考虑 阅读全文

posted @ 2011-09-08 15:43 Mayvar 阅读(586) 评论(0) 推荐(0) 编辑

备忘录模式(Memento Pattern)
摘要:Net设计模式实例之备忘录模式(Memento Pattern) 一、备忘录模式简介(Brief Introduction)备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。二、解决的问题(What To Solve) 当系统功能比较复杂,而且需要记录历史属性以便当需要时做恢复动作。Originator可以根据保存的Memento信息还原到前一状态。 三、备忘录模式分析(Analysis)1、备忘录模式结构Originator类:发起人。CreateMemento方法,负责创建一个 阅读全文

posted @ 2011-09-08 15:41 Mayvar 阅读(960) 评论(0) 推荐(1) 编辑

中介者模式(Mediator Pattern)
摘要:Net设计模式实例之中介者模式(Mediator Pattern) 一、中介者模式简介(Brief Introduction)中介者模式(Mediator Pattern),定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互。 Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each othe 阅读全文

posted @ 2011-09-08 15:39 Mayvar 阅读(3847) 评论(1) 推荐(2) 编辑

状态模式(State Pattern)
摘要:Net设计模式实例之状态模式(State Pattern) 一、状态模式简介(Brief Introduction)状态模式(State Pattern),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。二、解决的问题(What To Solve)状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。三、状态模式分析(Analysis)1、状态模式结构Context类:维护一个C 阅读全文

posted @ 2011-09-08 15:37 Mayvar 阅读(947) 评论(0) 推荐(1) 编辑

访问者(Visitor)模式
摘要:设计模式(20)-Visitor Pattern 分类: 设计模式 2006-11-10 20:55 179人阅读 评论(0) 收藏 举报 一、访问者(Visitor)模式访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。问题提出System.Collection命名空间下提供了大量集合操作对象。但大多数情况下处理的都是同类对象的聚集。换言之,在聚集上采取的操作都是一些针对同类型对象的同类操作。但是如果针对一个保存有不同类型对象的聚集采取某种操作该怎么办呢?粗看上去,这似乎不是什么难题。可是如果需要针对一个包含不同类型元 阅读全文

posted @ 2011-09-08 15:32 Mayvar 阅读(458) 评论(0) 推荐(1) 编辑

命令(Command)模式
摘要:设计模式(18)-Command Pattern 分类: 设计模式 2006-11-10 20:52 169人阅读 评论(0) 收藏 举报 一、命令(Command)模式命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作:请求的一方发出请求要求执行一个操 阅读全文

posted @ 2011-09-08 15:31 Mayvar 阅读(316) 评论(0) 推荐(0) 编辑

策略(Strategy)模式
摘要:设计模式(22)-Strategy Pattern 分类: 设计模式 2006-11-10 20:57 253人阅读 评论(0) 收藏 举报 一、策略(Strategy)模式策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的教材类图书实行每本一元的折扣;对连环画类图书提供每本7%的促销折扣,而对非教材类的计算机 阅读全文

posted @ 2011-09-08 15:30 Mayvar 阅读(318) 评论(0) 推荐(0) 编辑

观察者(Observer)模式
摘要:设计模式(19)-Observer Pattern 分类: 设计模式 2006-11-10 20:53 184人阅读 评论(0) 收藏 举报 一、观察者(Observer)模式观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出 阅读全文

posted @ 2011-09-08 15:26 Mayvar 阅读(308) 评论(0) 推荐(0) 编辑

模板方法(Template Method)模式
摘要:设计模式(21)-Template Method Pattern 分类: 设计模式 2006-11-10 20:56 250人阅读 评论(0) 收藏 举报 一、模板方法(Template Method)模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。很多人可能没有想到,模版方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模版方法模式而没有意识到自己已经使用了这个模式。模版方法模式是基于继承的代码复用的基本技术, 阅读全文

posted @ 2011-09-08 15:24 Mayvar 阅读(339) 评论(0) 推荐(0) 编辑

享元(Flyweight)模式
摘要:设计模式(14)-Flyweight Pattern 分类: 设计模式 2006-11-10 20:36 138人阅读 评论(0) 收藏 举报 一、享元(Flyweight)模式Flyweight在拳击比赛中指最轻量级,即"蝇量级",有些作者翻译为"羽量级"。这里使用"享元模式"更能反映模式的用意。享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External State)。内蕴状态是存储在享元对象内部并且不会随环境改变而改变。因此内蕴状态并可以共享。 阅读全文

posted @ 2011-09-08 15:22 Mayvar 阅读(311) 评论(0) 推荐(0) 编辑

合成(Composite)模式
摘要:C#设计模式(11)-Composite Pattern 分类: 设计模式 2006-11-10 20:30 185人阅读 评论(0) 收藏 举报 一、合成(Composite)模式合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。从和尚的故事谈起这是小时候我奶奶讲的故事:从前有个山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的什么故事呢?从前有个山,山里有个庙……。奶奶的故事要循环多少次,根据你多长时间睡着而定。在故事中有山、有庙、有和尚、有故事。因此,故事的角色有两种. 阅读全文

posted @ 2011-09-08 15:21 Mayvar 阅读(366) 评论(0) 推荐(0) 编辑

桥梁(Bridge)模式
摘要:设计模式(16)-Bridge Pattern 分类: 设计模式 2006-11-10 20:39 164人阅读 评论(0) 收藏 举报 一、桥梁(Bridge)模式桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。注:《Java与模式》一书认为Bridge模式不是一个使用频率很高的模式,我不太赞同,我认为Bridge模式中蕴涵了很多设计模式的关键思想在里面,所以我这里采纳了《Design Pa 阅读全文

posted @ 2011-09-08 15:20 Mayvar 阅读(238) 评论(0) 推荐(0) 编辑

装饰(Decorator)模式
摘要:C#设计模式(12)-Decorator Pattern 分类: 设计模式 2006-11-10 20:32 164人阅读 评论(0) 收藏 举报 一、装饰(Decorator)模式装饰(Decorator)模式又名包装(Wrapper)模式[GOF95]。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。引言孙悟空有七十二般变化,他的每一种变化都给他带来一种附加的本领。他变成鱼儿时,就可以到水里游泳;他变成雀儿时,就可以在天上飞行。而不管悟空怎么变化,在二郎神眼里,他永远是那只猢狲。装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在 阅读全文

posted @ 2011-09-08 15:19 Mayvar 阅读(214) 评论(0) 推荐(0) 编辑

代理(Proxy)模式
摘要:C#设计模式(13)-Proxy Pattern 分类: 设计模式 2006-11-10 20:35 202人阅读 评论(0) 收藏 举报 一、代理(Proxy)模式代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,中文都可译成"代理"。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。二、代理的种类如果按照使用目的来划分,代理有以下几种:远程(Remote)代理:为一个位 阅读全文

posted @ 2011-09-08 15:18 Mayvar 阅读(598) 评论(0) 推荐(0) 编辑

适配器(Adapter)模式
摘要:C#设计模式(10)-Adapter Pattern 分类: 设计模式 2006-11-10 20:29 172人阅读 评论(0) 收藏 举报 结构模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构。结构模式描述两种不同的东西:类与类的实例。根据这一点,结构模式可以分为类的结构模式和对象的结构模式。后续内容将包括以下结构模式:适配器模式(Adapter):Match interfaces of different classes 合成模式(Composite):A tree structure of simple and composite objects 阅读全文

posted @ 2011-09-08 15:17 Mayvar 阅读(501) 评论(0) 推荐(0) 编辑

门面(Facade)模式
摘要:设计模式(15)-Facade Pattern 分类: 设计模式 2006-11-10 20:38 159人阅读 评论(0) 收藏 举报 一、门面(Facade)模式外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。医院的例子用一个例子进行说明,如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴款,才能到化验部门做化验。化验后,再回到门诊 阅读全文

posted @ 2011-09-08 15:15 Mayvar 阅读(280) 评论(0) 推荐(0) 编辑

单例(Singleton)模式
摘要:C#设计模式(7)-Singleton Pattern 分类: 设计模式 2006-11-10 20:22 246人阅读 评论(0) 收藏 举报 一、单例(Singleton)模式单例模式的特点:单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其它对象提供这一实例。单例模式应用:每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。 一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个主键编号。否则会出现主键重复。二、Singleton模式的结构:Singleton模式包含的角色只有 阅读全文

posted @ 2011-09-08 15:13 Mayvar 阅读(288) 评论(0) 推荐(0) 编辑

建造者(Builder)模式
摘要:C#设计模式(8)-Builder Pattern 分类: 设计模式 2006-11-10 20:25 151人阅读 评论(0) 收藏 举报 一、建造者(Builder)模式建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。对象性质的建造有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有 阅读全文

posted @ 2011-09-08 15:12 Mayvar 阅读(248) 评论(0) 推荐(1) 编辑

导航