甜心奶酪的专栏

待到秋来九月八,我花开后百花杀; 冲天香阵透长安,满城尽带黄金甲。

设计模式原则

开-闭原则(OCP):一个软件实体应当对扩展开放,对修改关闭。里氏代换原则(LSP):一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。 依赖倒转原则(DIP):要依赖于抽象,不要依赖于具体。接口隔离原则(ISP):使用多个专门的接口比使用单...

2007-08-03 13:40:00

阅读数:471

评论数:0

设计模式总结

创建型模式:(1) Sigleton模式解决的是实体对象个数的问题。除了Sigleton之外,其他创建型模式解决的都是new所带来的耦合管理。(2) Factory Method,Abstract Factory , Builder都需要一个额外的工厂类来负责实例化“易变对象”,而Prototyp...

2007-08-03 13:18:00

阅读数:310

评论数:0

访问者(Visitor)模式

 类层次结构的变化类层次结构中可能经常由于引入新的操作,从而将类型变得脆弱...1、动机在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透...

2007-08-03 09:08:00

阅读数:374

评论数:0

策略(Strategy)模式

对象可能经常需要使用多不同的算发,但是如果变化频繁,会将类型变得脆弱...1、动机在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身...

2007-08-02 14:23:00

阅读数:426

评论数:0

状态(State)模式

对象状态影响对象行为对象拥有不同的状态,往往会行使不同的行为...1、动机在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化。比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之前引入紧...

2007-08-02 09:46:00

阅读数:313

评论数:0

备忘录(Memento)模式

对象状态的回溯对象状态的变化无端,如何回溯/恢复对象在某个点的状态?1、动机在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。如何实现对象状态的良好保存与恢复?但同时...

2007-08-01 14:31:00

阅读数:422

评论数:0

职责链(chain of responsibility)模式

某些对象请求的接受者可能多种多样,变化无常 1、动机在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指定,将必不可少地带来请求发送者与接受者的紧耦合。如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。2、...

2007-07-31 16:20:00

阅读数:405

评论数:0

观察者(Observer)模式

发布-订阅模型 1、动机在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,如果这样的依赖关系过于紧密,将使软件不能很好得抵御变化。2、意图定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所...

2007-07-25 13:48:00

阅读数:468

评论数:1

迭代器(Iterator)模式

集合的内部结构与外部访问1、动机在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对...

2007-06-14 14:05:00

阅读数:460

评论数:0

中介者(Mediator)模式

依赖关系的转化多对多的关系 --> 多对一的关系1、动机在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下, 我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的...

2007-06-05 14:12:00

阅读数:434

评论数:0

解释器(Interpreter )模式

1、动机在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化,在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。2、意图给定一个语言,定义它的文法的一种表示,并...

2007-05-30 18:46:00

阅读数:446

评论数:0

命令者(Command)模式

耦合与变化耦合是软件不能抵御变化灾难的根本性原因,不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系。1、动机在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种紧耦合。但在某些场合——比如需要对行为进行“记录、撤消/重做(undo/redo)、事务”等处理,这种...

2007-05-28 11:24:00

阅读数:454

评论数:0

模版方法(Template Method)模式

无处不在的Template Method,如果你只想掌握一种设计模式,那么它就是Template Method。变与不变变化……是软件设计的永恒主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现系统中的变化点和稳定点,并使用特定的设计方法来应对这种变化。1、动机在软件构...

2007-05-24 19:56:00

阅读数:311

评论数:0

代理(Proxy)模式

直接与间接人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活,满足特定需求的解决方案。1、动机在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。如何在...

2007-03-31 14:52:00

阅读数:458

评论数:4

享元(FlyWeight)模式

面向对象的代价面向对象很好地解决了系统抽象性的问题,同时在大多数情况下,也不会损及系统的性能。但是,在某些特殊的应用中下,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销。比如图形应用中的图元等对象、字处理应用中的字符对象等。1、动机采用纯粹对象的问题在于大量细粒度的对象会很快充斥在...

2007-03-30 11:34:00

阅读数:389

评论数:0

外观(Facade)模式

系统的复杂度public class Wheel{ public void WAction1(); public void WAction2();}public class Engine{ public void EAction1(); public void EAction2();}public...

2007-03-29 13:46:00

阅读数:399

评论数:0

装饰(Decorator)模式

子类复子类,子类何其多public abstract class Tank{ public abstract void Run(); public abstract void Shot(); public abstract void Thun();}public class T50 : Tank{...

2007-03-28 16:56:00

阅读数:365

评论数:0

合成(Composite)模式

 对象容器的问题 public interface IBox{ public void Process();}public class SigleBox : IBox{ public void Process(){...}}public class ContainBox : IBox{ publi...

2007-03-28 16:37:00

阅读数:336

评论数:0

桥接(Bridge)模式

 依赖倒置原则抽象B是相对稳定的,实现细节B是相对变化的。如果抽象B也不稳定,也会变化,怎么办?假如我们需要一个支持PC和手机的坦克游戏,在PC上和手机上功能都一样。都有同样的类型,面临同样的需求功能变化,比如坦克可能有不同种的型号,T50 ,T75,T90......对于其中的设计,我们很可能很...

2007-03-22 15:27:00

阅读数:400

评论数:0

适配器(Adapter)模式

 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。1、动机在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要...

2007-03-20 18:45:00

阅读数:444

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭