摘要: 意图 代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。适用性1.在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式。下面是一 些可以使用P r o x y 模式常见情况: 1) 远程代理(Remote Proxy )为一个对象在不同的地址空间提供局部代表。 NEXTSTEP[Add94] 使用N X P r.. 阅读全文
posted @ 2012-04-07 11:50 孙金棚 阅读(878) 评论(0) 推荐(2) 编辑
摘要: 意图 运用共享技术有效地支持大量细粒度的对象。典型的享元模式的例子为文书处理器中以图形结构来表示字符。一个做法是,每个字型有其字型外观, 字模 metrics, 和其它格式资讯,但这会使每个字符就耗用上千字节。取而代之的是,每个字符参照到一个共享字形物件,此物件会被其它有共同特质的字符所分享;只有每个字符(文件中或页面中)的位置才需要另外储存。以下程式用来解释上述的文件例子。这个例子用来解释享元模式利用只载立执行立即小任务所必需的资料,因而减少内存使用量。 适用性 1.一个应用程序使用了大量的对象。 2.完全由于使用大量的对象,造成很大的存储开销。 3.对象的大多数状态都可变为外部状态... 阅读全文
posted @ 2012-04-06 09:25 孙金棚 阅读(1214) 评论(1) 推荐(4) 编辑
摘要: 意图 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。适用性 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。F a c a d e 可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过f a c a d e 层。 2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入f a c ... 阅读全文
posted @ 2012-04-05 19:09 孙金棚 阅读(305) 评论(1) 推荐(1) 编辑
摘要: 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。适用性 1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 2.处理那些可以撤消的职责。 3.当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。 结构图Code 1 // Decorator 2 3 /* Notes: 4 * Dynamically wrap functionality with additonal func... 阅读全文
posted @ 2012-04-05 18:42 孙金棚 阅读(1144) 评论(0) 推荐(2) 编辑
摘要: 桥接模式有点像适配器模式,都是用一个类将一种接口转换成另一种接口。但是适配器模式的意图是:是一个或多个类的接口看起来像一个特定的接口。桥接模式将类的接口和它的实现分离,无需修改客户端代码就可以改变或替换实现过程。 桥接模式的参与这又Abstraction,他定义类的接口,Refined Abstraction,他扩展实现由Abstraction定义的接口;Implementor,它定义实现 的接口;ConcreteImplementor,他是实现类。 假设我们有一个程序,要在窗口中显示一系列的产品。最简单的就是用ListBox,但在售出大量产品后,我们希望在产品中显示产品名称以及销... 阅读全文
posted @ 2012-03-29 17:42 孙金棚 阅读(1139) 评论(1) 推荐(2) 编辑
摘要: 结构型模式概述 结构模式(Structural Pattern)描述的是如何组合类和对象已获得更大的结构。类模式和对象模式之间的区别是,类模式描述的是如何使用继承提供更有用的程序接口。而对象模式描述的是通过使用对象组合或将对象包含在其他对象里,将对象组合成更大的结构。 例如,适配器模式(Adapter Pattern)可以使用一个类的接口区配另一个接口,从而是程序设计变得更容易。还会看到其他的结构模式,能将对象组合来实现新功能。例如组合模式(Composite Pattern),正如他的名字一样对象组合,其中每个对象既可以是简单的对象也可以是组合对象。代理模式(Proxy Pattern)通常 阅读全文
posted @ 2012-03-29 13:14 孙金棚 阅读(1373) 评论(0) 推荐(5) 编辑
摘要: 介绍用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。解决什么问题:它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。原型模式强调的是用已有对象克隆出新对象,是对象的创建便方便,不需要重复的new操作。原型模式的原型中一般会有一个Clone方法 阅读全文
posted @ 2012-03-28 15:29 孙金棚 阅读(1177) 评论(0) 推荐(2) 编辑
摘要: 生成器模式又称建造者模式,定义一个抽象的建造者的角色(Builder),规定所有具体的建造者都应该具有的功能——这些功能就是如何创建复杂对象的某个特定部分(子对象),而具体如何创建子对象有具体的创建者实现。再定义一个指导者的角色,它把创建者作为工具,知道如何使用这个工具来创建复杂对象。这样,客户在需要创建这个复杂对象的时候,只需要给指导者一个具体的创建者就可以了。至于具体创建者如何创建子对象的细节以及这些子对象之间的差异,不是指导者,也不是客户关心的。 下面我们用一个例子来说明一下生成器模式,假设我们不但需要一个计算的算法,还需要一个由于显示数据根据数据不同而完全不同的用户界面。我们考... 阅读全文
posted @ 2012-03-28 10:59 孙金棚 阅读(1370) 评论(1) 推荐(3) 编辑
摘要: 尽管在某种程度上,单件模式是限制而不是改进类的创建,但它仍和其他创建模式分在一组。单件模式可以保证一类有且只有一个实例,并提供一个访问它的全局访问点,在程序设计过程中,有很多情况需要确保一个类只能有一个实例。例如系统中能有一个窗口管理器,一个数据库引擎的访问点。PC机中可能有几个串口,但只能有一个COM1实例。使用静态方法创建单件 让一个类只有一个实例,最容易的方法就是在类中嵌入一个静态变量,并在第一个类实例中设置改变量,而且每次进入构造函数都要检查。不管类有多少实例,静态变量只能有一个实例。为了防止类被多次实例化,我们把构造函数声明为私有的,这样只能在类的静态方法里创建一个实例。下面创建一. 阅读全文
posted @ 2012-03-27 19:41 孙金棚 阅读(1174) 评论(0) 推荐(3) 编辑
摘要: 抽象工厂模式,比工厂模式具有更高层次的抽象。当要返回一系列相关类中的某一个,而每个类都能根据需要返回不同的对象时,可以使用这种模式。换句话说,抽象工厂是一个工厂对象,他能返回一系列相关类中的一个类。可以用简单工厂决定返回那个类。通常认为,实验式的例子应该引用汽车制造产,我们希望丰田汽车完全使用丰田配件,而福特汽车完全使用福特配件。可以把每个汽车制造厂设想为抽象工厂,配件作为一组相关的类。花园规划工厂 我们可以考虑一下实际的例子,字应用程序里要用到抽象工厂。假设读者编写一个程序来规划花园,这可能是季生植物型花园、蔬菜型花园、或者多年植物花园。不管规划哪种类型的花园,都会遇到如下问题:1.边缘种. 阅读全文
posted @ 2012-03-27 14:52 孙金棚 阅读(1043) 评论(0) 推荐(3) 编辑