- 博客(15)
- 资源 (18)
- 收藏
- 关注
原创 设计模式之 template method 与 visitor
<br />template method要注意一点的是在父类中定义了一个框架,而这个框架中有几个步骤可以由子类来重载或者扩充,这是template method和我最初想得不一样的地方,我开始把他当成了factory method的东西了。这个两个还是非常类似的。<br />visitor模式,有点像STL中的函数对象,尤其是我在copy,find的时候。但感觉比函数对象又要深刻一点。<br />visitor模式目的是把数据结构的组织和处理分开来,啥意思呢,假如我遍历一个列表,同时想对某个元素处理点东西
2010-07-25 20:58:00 2670 1
原创 设计模式之 strategy和state
<br />这个叫策略模式。最近感觉后面这几个行为模式都特别得像!<br />策略模式对某些算法进行了封装(不一定是算法咯)!<br />比如翻译一句话,用法语,日语,英语等翻译,就可以采用策略模式。<br />input...<br />translate..<br />output...<br />在translate中这里传入策略对象,即可完成相应功能。<br />这种将算法的变化部分独立出来的方式,就是策略。<br /> <br />state模式是状态模式,这个主要解决了大量使用if,else的情
2010-07-25 20:34:00 2507
原创 设计模式之 memento与observer
<br />memento的意思是备忘录,这种模式的存在道理很简单,保存类的某些状态,到以后好恢复。<br />memento的实现来说包括:<br />1 定义memento接口,这个接口最好有窄接口和宽接口,窄接口是给客户用的,一般来说不会透露很多详细信息给客户<br />宽接口是给originator用的,其实memento保存了originator自己的某些状态。<br />2 client从originator中得到一个memento<br />3 后续想恢复的时候,将保存的memento传给or
2010-07-25 15:35:00 2316
原创 设计模式之 mediator
<br />中介者?这个名字没完全表达本身的含义,这个应该是调停者或者叫仲裁者,都比中介者强。<br />啥个意思?就是多个对象相互影响,为了好控制,好管理,把交互的逻辑全部交到仲裁者那去做,这就是<br />mediator的中心思想。<br />再举那个BT的VADialg为例,涉及到太多的交互了,换一个list导致界面很多元素都得换,所以到处都是修改修改修改....<br />如果采用仲裁者方法,很多东西就可以在一处地方修改了。<br />从实现角度看,创建控件可以也放到仲裁者那里去做,采用abstr
2010-07-24 11:46:00 2408
原创 设计模式之 interpreter和iterator
<br />这个是我所谓的两I模式。其中第一个interpreter叫解释模型,感觉比较复杂和难用。道理是这样的,(难道只能做语法分析?)<br />一个句子,是某种格式的组合,所以,每种组合都可以单独由一个解释器来解释,这样就把整个难度划分开来了。它这有几个难度<br />1 必须按某种顺序来调用解释器,目前的方法是搞成个什么语法树,通过遍历的方式来解释(分析的目的最终是要得到一个简化的结果)<br />光这个,就已经比较复杂了。<br />2 必须保存某种状态...<br />我接触到的编码中还没有用到
2010-07-24 08:45:00 2229
原创 设计模式之 command
<br />command这种方式我非常喜欢,觉得这样把处理和invoke分开了,挺好。<br />它的想法是,以MFC的UI操作为例。当用户单击一个按钮的时候,以前的做法是直接在OnClickButton中处理这个事情,当然,代码<br />也是写死到函数中。所以比较麻烦的是在每个button处理中代码都很多,并且当一个button还需要根据外界情况来分别处理的时候,if else会挺烦。有了command就很方便了(想起大洋那个巨复杂,巨乱的VADialog,真是垃圾中的垃圾代码),所有操作都在comm
2010-07-24 08:22:00 2323
原创 设计模式之 chain of responsibility
<br />中文叫职责链,啥个意思?这个和我开始想的不太一样。<br />我开始觉得有个队列,外头有个使用队列的地方,然后轮询调用这个队列的每个成员来处理。<br />但是职责链的链是一个隐式的。每个对象有一个隐式得指向后续对象的指针,但该对象自己处理不了的时候,会交给<br />后续对象处理。<br />这种情况在一般的编程中很少有对应的场景,但是在GUI编程中是很常见的。GUI编程中,每个控件都有一个父,当自己处理不了的时候,就把它交给父对象处理了。注意,这里要区别交给父类函数处理。到底交给父类还是父对
2010-07-24 08:05:00 2183
原创 设计模式之 proxy
<br />proxy是代理的意思。其实我更感觉想某种意义上的封装,例如最常用的智能指针,和android的AutoLock,都是利用对象的<br />构造和析购函数来完成创建和清理的工作,那么代理类有什么需要注意的吗?<br />proxy和被代理的对象必须有同样的接口,这保证了client使用proxy和使用被代理对象一致。这种问题我从来没有从面向对象的角度去考虑过,以前肯定做过代理类,但是没想到过从同一个基类派生。<br />代理类的作用,<br />1 远程代理,当被代理在另外一个进程中,需要这种代
2010-07-24 07:56:00 2625
原创 设计模式之 facade与flyweight
<br />facade是外观的意思,啥意思呢?这个模式主要是针对子系统的复杂类的情况下,通过它可以提供一个简单的功能类。比如目前做的dlna库,写了好几个接口,而且基本上只有我知道是怎么个用法。但是dlna的客户端真得需要了解这么复杂的东西吗?不用,所以后面单独弄了一个dlna类,接口非常简单。这个就是facade的目的,把子系统的功能积聚到一个简单的类中去。注意,facade和之前的adapter等目的明显不同,这个是为了屏蔽子系统的复杂性而做的。<br /> <br />flyweight,是轻量级的
2010-07-18 20:29:00 2278
原创 设计模式之composite decorator模式
<br />composite是复合的意思,就是一个对象可包含其他同类对象的东西。<br />有两种实质不同的对象--leaf与component,leaf是叶子对象,component是容器对象,可用于容纳其他leaf或子component的。<br />这里在实现的时候要注意一个问题:component和leaf是同一类型的,也就是有共同的基类。为何这么做?因为composite的本质是把leaf和component看做同一个东西,不用区别对待,所以有共同基类是必然的。<br />这样就有一个问题,基类
2010-07-18 10:48:00 3692
原创 设计模式之adapter bridge模式
<br />先说adapter模式<br />adapter中文为适配器模式,目的和想法很简单,就是一种封装,只不过这种封装是为了从接口A到达接口B,啥个意思呢,A已经提供功能了,但是另外一个东西只能使用B的接口,所以得弄一个东西将A转换成B接口,这个转换器就是adpater。从这个描述可以看到,我们实际上有三个东西。<br /> A----adapter-----B。其中A叫adaptee,B叫target。<br />怎么实现呢?通常有2种方法:<br />adapter---继承A,B,这样使用B的
2010-07-17 20:21:00 4884
原创 设计模式之 prototype和singleton
先说singleton,就是无论怎么调函数,其实返回得都是同一个对象。这个相对来说比较简单,至于有什么作用吗?要看应用了。不如数据库连接一般就给你一个连接,管你上面供几个对象同时使用。无需多说。在实现上,要注意了,用接口怎么返回子类对象?我一般用一个API,而不是类函数来做这个,这就不是面向对象了,考虑考虑JAVA吧。通过类似注册表,create()--->read type from registry 来创建不同子类...够可以的....现在说说这个比较少见的proto type,为啥有这个玩意? 注意我
2010-07-15 21:29:00 3179
原创 设计模式之Factory method
<br />刚开始一直没搞清楚abstract factory 和factory method有什么区别..因为二者常常混在一起用。再仔细想想:<br />AF出来的是一个Factory,这个factory可以创造一系列产品。而FM所属对象本身就是一个factory,调用FM函数将产生一个产品。<br />AF---->Factory(自己可能就提供FM)---->Product。它这个和AF是面向不同层次的,AF更加广泛高一些。当然也可以做一个AF类,而且只有一个createProduct函数(本来一个F
2010-07-15 21:00:00 2806
原创 设计模式之Builder
<br />Builder模式干啥子用的?其实是把创建的工作交给builder做了。另外一个是builder可以控制一个产品每一个部件是怎么装配的。<br />说实话,一般情况下,当然希望一下就builder好了,谁希望一步一步得去builder呢?<br />我记得java中的XML解析好像有这个,由于XML很大,所以每builder一步都会回调一下告诉用户一个东西已经builder完了。这可能<br />是builder的一个好处吧。<br />[可否在网络中解析协议也这么干?恩,对。以前常用的KLV
2010-07-15 20:32:00 3305
原创 设计模式之Abstract Factory
<br />前言:<br /> 最近在研究android的时候,发现该系统大量使用了设计模式的知识。说来惭愧,在此之前,我从来没见过C++代码中有如此多重继承的<br />使用方法,并曾一度认为是android故意搞这么复杂,想让我们看不明白。后来在用JAVA开发android的程序时候,发现JAVA的API大部分也是这么弄的,不过用了Implements罢了....反思之,一定是我弄错了。这时候想起了设计模式,买来一看,真的是非常经典啊,所以准备写点东西,权当是笔记好了。<br />(该书已经看过一遍了
2010-07-11 21:13:00 4927 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人