男人.No boy no cry

彪悍的人生,不需要解釋...

导航

文章分类 -  Design Patterns

摘要:概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。 意图 定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory... 阅读全文

posted @ 2006-01-05 16:10 Piccolo Goo 阅读(255) 评论(0) 推荐(0)

摘要:FACTORY—人才市场:以往是要哪个人才,就找哪个人才,效率低,现在有了人才市场,我们只需 直接去人才市场挑一个好了; BUILDER—生产流水线:以前是手工业作坊式的人工单个单个的生产零件然后一步一步组装做,好 比有了工业革命,现在都由生产流水线代替了。如要造丰田汽车,先制定汽车的构造如由车胎、方 向盘、发动机组成。再以此构造... 阅读全文

posted @ 2005-12-27 16:20 Piccolo Goo 阅读(211) 评论(0) 推荐(0)

摘要:一、 策略(Strategy)模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的教材类图书实行每本一元的... 阅读全文

posted @ 2005-11-22 11:20 Piccolo Goo 阅读(251) 评论(0) 推荐(0)

摘要:一、 访问者(Visitor)模式 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。 问题提出 System.Collection命名空间下提供了大量集合操作对象。但大多数情况下处理的都是同类对象的聚集。换言之,在聚集上采取的操作都是一些针对同类型对象的同类操作。但是如果针对一个保存有不同类型对象的聚集采取某种操作该怎么办... 阅读全文

posted @ 2005-11-22 11:18 Piccolo Goo 阅读(213) 评论(0) 推荐(0)

摘要:一、 模板方法(Template Method)模式 准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。 很多人可能没有想到,模版方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模版方法模式而没有意识到自己已经使用了这... 阅读全文

posted @ 2005-11-22 11:18 Piccolo Goo 阅读(183) 评论(0) 推荐(0)

摘要:一、 观察者(Observer)模式 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 一个软... 阅读全文

posted @ 2005-11-22 11:16 Piccolo Goo 阅读(172) 评论(0) 推荐(0)

摘要:一、 命令(Command)模式 命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给... 阅读全文

posted @ 2005-11-22 11:15 Piccolo Goo 阅读(201) 评论(0) 推荐(0)

摘要:行为模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为模式不仅仅是关于类和对象的,而且是关于它们之间的相互作用的。 行为模式分为类的行为模式和对象的行为模式两种。 类的行为模式:类的行为模式使用继承关系在几个类之问分配行为。 对象的行为模式:对象的行为模式则使用对象的聚合来分配行为。 在后面将要介绍的行为模式包括以下几种: Chain of Resp... 阅读全文

posted @ 2005-11-22 11:13 Piccolo Goo 阅读(405) 评论(0) 推荐(0)

摘要:一、 代理(Proxy)模式 代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 代理模式的英文叫做Proxy或Surrogate,中文都可译成"代理"。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 二、 代理的种类 如果按照使用目的来划分... 阅读全文

posted @ 2005-11-22 11:12 Piccolo Goo 阅读(234) 评论(0) 推荐(0)

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

posted @ 2005-09-09 14:30 Piccolo Goo 阅读(286) 评论(0) 推荐(0)

摘要:一、 门面(Facade)模式 外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。 医院的例子 用一个例子进行说明,如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。 首先病人必须先挂号,然后门诊。如果医生... 阅读全文

posted @ 2005-09-07 17:21 Piccolo Goo 阅读(183) 评论(0) 推荐(0)

摘要:一、 装饰(Decorator)模式 装饰(Decorator)模式又名包装(Wrapper)模式[GOF95]。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 引言 孙悟空有七十二般变化,他的每一种变化都给他带来一种附加的本领。他变成鱼儿时,就可以到水里游泳;他变成雀儿时,就可以在天上飞行。而不管悟空怎么变化,在二郎神眼里,他永远是那只猢狲。 装饰模式以对客户透明的... 阅读全文

posted @ 2005-09-07 14:32 Piccolo Goo 阅读(157) 评论(0) 推荐(0)

摘要:设计模式C#语言描述——装饰(Decorator)模式 *本文参考了《JAVA与模式》的部分内容,适合于设计模式的初学者。 装饰模式又名包装模式,以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。它使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰类,客户端并不会觉得对象在装饰前和装饰后有什么不同。在以下情况下应使用装饰模式:需要扩展一个类的功能,或给一个类增... 阅读全文

posted @ 2005-09-07 14:26 Piccolo Goo 阅读(225) 评论(0) 推荐(0)

摘要:三、 依赖倒置原则(DIP) 依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。 简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述: 抽象不应当依赖于细节;细节应当依赖于抽象;要针对接口编程,不针对实现编程。 反面例子: 缺点:耦合太紧密,Light发生变化将影响ToggleSwitch。 解决办法一:将Light作成... 阅读全文

posted @ 2005-08-01 15:47 Piccolo Goo 阅读(202) 评论(0) 推荐(0)

摘要:《人月神话》焦油坑、没有银弹* 软件腐化的原因: 问题所在 设计目标----------------------------------------------------------------------------过于僵硬 可扩展性(新性能可以很容易加入系统)过于脆弱 灵活性(修改不会波及其它)复用率低 粘度过高 可插入性(新功能容易加入系统(气囊加入方向盘)) *... 阅读全文

posted @ 2005-08-01 15:32 Piccolo Goo 阅读(199) 评论(0) 推荐(0)

摘要:--------------------------------------------------------------------------------创建型模式 1、FACTORY一追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:... 阅读全文

posted @ 2005-07-28 14:27 Piccolo Goo 阅读(230) 评论(0) 推荐(0)

摘要:一、 合成(Composite)模式 合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 从和尚的故事谈起 这是小时候我奶奶讲的故事:从前有个山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的什么故事呢?从前有个山,山里有个庙……。奶奶的故事要循环多少次,根据你多长时间睡着... 阅读全文

posted @ 2005-07-19 13:27 Piccolo Goo 阅读(203) 评论(0) 推荐(0)

摘要:设计模式C#语言描述——合成(Composite)模式 *本文参考了《JAVA与模式》的部分内容,适合于设计模式的初学者。 合成模型模式属于对象的结构模式,有时又叫做部分-整体模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。如文件夹与文件就是合成模式的典型应用。根据模式所实现接口的区别,合成模式可分为安全式和透明式两... 阅读全文

posted @ 2005-07-19 12:55 Piccolo Goo 阅读(407) 评论(0) 推荐(0)

摘要:一、 桥梁(Bridge)模式 桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。 注:《Java与模式》一书认为Bridge模式不是一个使用频率很高的模式,我不太赞同,我认为Bridge模式中蕴涵了很多设计模式... 阅读全文

posted @ 2005-07-15 09:42 Piccolo Goo 阅读(275) 评论(0) 推荐(0)

摘要:设计模式C#语言描述——适配器(Adapter)模式 *本文参考了《JAVA与模式》的部分内容,适合于设计模式的初学者。 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。包括类的适配器模式和对象的适配器模式两种不同的形式。 类的适配器模式把被适配的类的API转换成为目标类的API,其静态结构图如... 阅读全文

posted @ 2005-07-14 18:10 Piccolo Goo 阅读(359) 评论(0) 推荐(0)