代码改变世界

设计模式之--访问者模式

2011-07-28 09:18 by java线程例子, 170 阅读, 0 推荐, 收藏, 编辑
摘要:《设计模式》一书对于访问者模式给出的定义为:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。从定义可以看出结构对象是使用访问者模式必须条件,而且这个结构对象必须存在遍历自身各个对象的方法。设想一个场景,就是学校,学校里有老师和学生,老师和学生可以称为两种元素,我们可以对这些元素进行很多操作(注意,这些操作都是外部性质的,不属于元素本身,这个至关重要),比如评价,问卷调查,采访和体检等,如果我们把这些操作定义在元素层次,显然不合理,一是这些操作不是元素对象的固有属性和行为,而是一些外部操作,不符合面向对象的封装和责任单一原则。如果把这些操 阅读全文

设计模式之--命令模式

2011-07-28 08:42 by java线程例子, 351 阅读, 0 推荐, 收藏, 编辑
摘要:命令模式的意图一是将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;二是对请求排队或记录请求日志,以及支持可撤消的操作。简略图如下:命令模式通过对命令的封装,将命令的请求(调用者Invoker)和执行(接收者Receiver)进行了责任分离,委派给不同的对象,不仅使得调用者和执行者之间实现了解耦(命令的请求方就不需要知道接收方的接口,也不需要知道命令是如何执行的具体情况),还使得可以记录命令的执行记录,添加执行日志,使得命令的控制、执行、取消和重做变得容易。Delphi的Action就采用了这种模式,其中Windows控件(比如按钮,菜单)是调用者,Action是命令,而接收者 阅读全文

设计模式之--适配器模式.

2011-07-26 21:00 by java线程例子, 336 阅读, 0 推荐, 收藏, 编辑
摘要:在日常生活中,我们时常会遇到一些兼容性的问题,比如我的笔记本的电源插头就是欧标的,在很多场合我都没法用,买一个可以用的插座当然是可选手段,但到那里去都拿这么大个家伙一是不方便,二也未必有地方可以插,所以我只好买个电源适配插座带在身上。再比如电脑的输入电压一般都只有20伏左右,而日常电源基本都是220伏,所以就需要一个电源适配器,来降低电压。这些都是为了解决不同标准之间的兼容性问题。设计模式中的适配器模式就是我们在设计中用来解决标准兼容性问题的一种重要手段。适配器的角色分为适配器,适配对象和适配目标。适配对象是具体功能的执行者,但因接口原因用户无法直接调用,适配目标是用户希望的调用接口,适配器就 阅读全文

设计模式之--组合模式

2011-07-26 20:52 by java线程例子, 276 阅读, 0 推荐, 收藏, 编辑
摘要:有时候我们需要维护一些对象,这些对象具有一定的层次结构,它们之间虽然差异很大,但在使用的时候我们希望能构一致的对待,比如Windows控件,绘图中的图形等,这个时候我们就可以采用组合模式来进行管理。组合模式就是将要管理的对象按树型结构来进行组织,表示成一种“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式的结构图如下:角色: 组件接口:提供一致的访问接口,注意组件接口可以是抽象类,也可以是具体类,还可以用接口实现; 组合对象:含有孩子对象的对象; 叶子对象:不含孩子对象的对象。组合对象自己维护一个子对象池,并按照组件接口的要求提供一致的访问方式,组合对象充当容器类 阅读全文

设计模式之-代理模式

2011-07-26 20:43 by java线程例子, 395 阅读, 0 推荐, 收藏, 编辑
摘要:代理模式(Proxy) ,英文又叫Surrogate。 代理在日常生活中很普遍,比如办身份证代理,产品销售代理,通信收费代理等,在计算机中也普遍存在,比如上网代理,远程调用代理,注册申请代理等。在代理过程中主要涉及的角色包括代理者,被代理者和事务,通过代理者和被代理者在是否参与事务,可以将代理分为职责代理和接口代理,所谓职责代理就是代理者完全行使被代理者的职责,被代理者不参与事务过程(至少在代理期间),比如代理总统,代理加工等,而接口代理就是被代理者和代理者都会参与事务过程,只是被代理者不直接面对用户,比如代理注册,代理收费,远程调用代理等。前者的实现不在本模式讨论范围之内,在程序设计中的代理 阅读全文

设计模式之-装饰模式

2011-07-25 22:27 by java线程例子, 224 阅读, 0 推荐, 收藏, 编辑
摘要:装饰的含义就是在原有的物件上增加饰品,使得物件能呈现出不同的特征。当然在类设计中,采用装饰模式,是用来为类增加新的特征和行为。结构如下: * * | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| * | Component |<-------------------------------------------------------------------| * |----------------------- -----| | * | Operation() | | * |________________| | * △ | * | | * | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | * | ̄ ̄ ̄ ̄ ̄ ̄.. 阅读全文

设计模式之-策略模式

2011-07-25 22:16 by java线程例子, 247 阅读, 0 推荐, 收藏, 编辑
摘要:如果一个类(CA)的方法存在不同的算法(F),而这些算法用户都可能用到,那么就可以将这种算法独立出来自我演变,既提供一个算法的抽象接口,再定义具体的算法类,而CA保持对算法的一个引用,CA中的方法不直接实现算法,而是调用用户所选的算法类中的算法来实现,这就是策略模式。也既定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 * * | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| * | Context | | Strategy | * |-----------------------------|◇-strategy---聚合------- 阅读全文

设计模式之-桥模式

2011-07-24 21:11 by java线程例子, 219 阅读, 0 推荐, 收藏, 编辑
摘要:顾名思义,桥的作用就是将两条相互独立的路桥接到一起,而两条路可以保持各自的相对独立。在程序设计中,“桥”模式中的桥只是一种形象的比喻。根据桥模式的定义,桥模式实现了一个主题(可以是一个类,也可以是一中设计上的概念)的抽象部分和实现部分的分离(有的地方定义为抽象与具体行为的分离)。抽象部分的基类和实现部分的基类充就当着桥(接口对接)的作用,而抽象部分的子类和实现部分的子类就是桥两边的路,可以各自相对独立的发展(变化)(之所以是相对独立,从实现上来讲就是这种变化不能脱离最终能够实现桥接这个目标)。 我们知道,对于对象的研究,我们可以用这样的模型来表达对象:属性和行为。行为和属性都是对象的特征,其中 阅读全文

学无止境,温故而知新

2011-07-22 22:21 by java线程例子, 271 阅读, 0 推荐, 收藏, 编辑
摘要:从开始学习这些常用的设计模式到现在有8年多时间了,每次回头看看这些设计模式都有新的收获,有新的理解,从实践中来,到实践中去,再到理论上来,如此反复,获益不少。也许是自己比较笨,又比较喜欢技术的缘故吧,这次把原来的笔记拿出来再看看,体会一下技术发展的脉络,希望能有所收获。作为一位Coder,也以此纪念一下自己的码字母的人生。 阅读全文

怀念Delphi--希望它能雄起!

2011-07-22 21:44 by java线程例子, 192 阅读, 0 推荐, 收藏, 编辑
摘要:前些天跟一个人聊起我自己的一个系统,我说是delphi做的,他说那太落后了,然后说了一堆,我只能汗。虽然我现在主要在dotnet平台上做事情,但我对delphi还是有感情的,毕竟用了那么多年,而且至今我觉得从开发速度上来说,至少在桌面系统开发方面,无人能及。Delphi至少有几个地方还是非常的经典:1、UI组织,Delphi的Form是可以继承的,这个东东非常有用,在提高开发速度方面简直就一个神器。2、BDE:这个东东的Query和TUpdateSQL结合,再加上datasource可以跨form引用query,对开发速度上的提高不是一点点。dotnet的dataset+command就有这个 阅读全文