yang_r 2011-12-15 10:52
good
#知了 2011-12-10 14:10
写的很好,受教了。支持。
suxiaojack 2011-12-03 22:24
#include <stdio.h>
#include <stdlib.h>
typedef struct tagPhone{
char* name;
void (*action)(struct tagPhone*);
} Phone;
typedef void(* PhoneAction)(Phone* phone);
void so()
{
printf("\n");
}
void BaseCall(Phone* p)
{
printf("%s Call sombody",p->name);
}
void withGPS(Phone* p)
{
if(p)
BaseCall(p);
printf(" with gps");
}
void withBlueTooth(Phone* p)
{
if(p)
BaseCall(p);
printf(" with BlueTooth");
}
void withGPSandBlueTooth(Phone* p)
{
withGPS(p);
withBlueTooth(NULL);
}
int main()
{
Phone p;
p.name="nokia phone";
p.action=BaseCall;
p.action(&p);
so();
p.action=withGPS;
p.action(&p);
so();
p.action=withBlueTooth;
p.action(&p);
so();
p.action=withGPSandBlueTooth;
p.action(&p);
so();
return 0;
}
抽象接口会导致代码阅读困难
action的调用形式都一样,谁知道具体实现了什么功能呢!
还是老老实实写函数比较好。
da胖小子 2011-12-03 09:05
相见恨晚啊!
初来博客园,请多关照。 2011-11-23 13:29
学习了,呵呵
NumberXiao 2011-11-07 22:15
学习了。
Jason Xu 2011-11-04 09:48
Mark regards
sweethome 2011-09-23 10:58
这例子实在看不懂啊, 在run里不使用clone直接把传进来的子类附给定义好的基类不也一样??
没看出这个所谓的prototype在这里的作用。
LiaoFian128 2011-08-11 09:07
可否解释一下动态代理。
呼静远 2011-08-05 08:41
喜欢你自己的理解
yanghe1117 2011-07-20 21:45
没有在原型类的对象基础上使用clone()生成新对象,没看出来例子怎么体现原型模式的
蠢蠢欲懂 2011-06-28 20:05
嗯,很好,简单易懂,学习了,谢谢啦、
袁安云 2011-05-06 21:21
不错,仔细看了一遍,对AOP又有了进一步的了解。
顾晓北 2011-03-29 11:19
正在看,有点不大明白。
LongDistanceClass这个类为什么也要实现IPorxy?
hanwesley 2011-02-10 16:11
请问楼主:问什么装饰模式要用构造方法传入component呢?用set方法注入一样的吧?
如果用set方法,还可以节约一次new?这样不可以吗?
edwardlewiswe 2010-10-08 10:08
[quote]alps07:这个类图是有错误的....
<br/>
<br/>看了博主的很多设计模式的文章, 类图画的或多或少有点问题...[/quote]
确实有点问题。
与GOF所述思想有点出入。
桀骜的灵魂 2010-10-06 10:42
虽然这篇博文写了很久,不过我希望可以批判一下。首先我赞成博主的开题的这句话,[quote]需求不明和需求不断的变化使我觉得继续做下去很乏味[/quote]。
不过浏览了这个驱动过程,十分失望。
1.根据用户所提供的需求,我们建立了两个类型:吉他和仓库。
你这里驱动太急速了,根据需求就直接可以得出两个对象模型,吉他没错,但这个仓库就莫名其妙了,我想,这个东西是你脑海里形成的,而不是根据客观需求而推导出来的,对吧?
2.吉他类型中包含了吉他的各个属性。
我是这样理解对象的属性,对象在不同用例场景下能捕获到不同的属性,每一个用例场景都只是对象的一个侧面,通过不同场景才能捕获出适用的属性,而不是想当然,一提及到人类,就很自然加上Age,Weight属性。
3.仓库类型中包含了吉他列表以及一些功能方法,如:添加吉他,获得吉他,查询吉他。
准确上说,这个不是从客户需求得出的,是从系统提供什么功能得出来的,客户并不关心你是否需要查询后得出吉他信息~
4.那个你提炼出来的吉他描述类,我觉得可有可无,当你要提取出来,看上去确实很简洁,不过你细想,和放在一起有什么不同?如果紧紧是看上简洁的问题,这样面对复杂程序,一个领域对象可能有30-40个属性,多的上100都有可能,你每一个都抽出一个描述类,何时是个头,面对N个领域对象,我保证你很无力,总有一天你会反思今天的多此一举?所以拍脑袋得出来的都不是好东西,我们要追求一种固有规则去推导设计,不然漏洞百出,但偶尔几个人顶起来,自己也没发现这个问题有多严重,日积月累只会学无所用。
星空下 2010-09-15 16:15
对于泛型,迫切需要熟识,最近被C++的模板弄头大了。
Hi福气鱼 2010-08-25 17:39
看了head first设计模式的命令模式,模模糊糊有点感觉,但是还是不是很清晰,一是项目经验比较少,二十没有动手应用这个模式。我现在按照你的方式,来一遍好了。
花语倾情 2010-06-24 18:01
有时候我不觉得当两个值一样的时候会引用同一个地址,当然这是个人看法吧!别见怪!
花语倾情 2010-06-24 17:57
[quote]dio:String str1 = “aa”;
<br>
<br>String str2 = “aa”;
<br>
<br>当这两个String类型变量的值相同时,实际上他们指向的是同一个内存空间
<br>
<br>我觉得楼主对内存的理解还比较肤浅,建议你再多了解一下。[/quote]
你觉得两个不同的变量引用的是同一个地址吗?那我修改其中一个不是连带的也修改了另外一个吗?你是在申明变量,就会重新为变量分配内存,而不是引用同一个地址!
Geerry 2010-06-01 09:15
你这只是单纯享元模式吧
徐培华 2010-05-12 12:52
发现很多人写这文章都用这张UML图。
俯瞰之鹰 2010-05-11 20:01
对初涉设计模式的设计者来讲,是一非常值得推荐的易懂选刊
小伦 2010-01-16 23:50
应该加一个你图示中的上下文类
小伦 2010-01-16 23:49
这个代码貌似没有体现出策略模式的精髓
陈光喜 2009-09-21 18:49
很好
楼主加油
网络过客 2009-09-12 15:10
这样实现不伦不类,不如用build模式。
qqqqqqqqqqqqqqqq 2009-08-31 11:05
感觉楼主错了 这个列子跟工厂方法没有区别
alps07 2009-06-24 10:58
这个类图是有错误的....
看了博主的很多设计模式的文章, 类图画的或多或少有点问题...
mhsoft 2009-03-07 14:24
少用new 对性能有好处
zhenqiyi 2009-02-23 16:39
易懂。好!我的入门级优秀读物
pillow 2009-01-02 19:46
受益匪浅!命令模式我一直有这个概念.知道请求者和实现者可以实现解藕.但是没有更多体会这种解藕的具体用途.这次更进一步了.^_^.谢谢!
zhuhaiyong 2009-01-01 17:03
MyImage的代码
人 2008-12-05 19:52
--引用--------------------------------------------------
Donnyleen: 错误 1 “projectDemo.builder.BMWBuilder”不会实现继承的抽象成员“projectDemo.builder.AbstractBuilder.BuildBody()” F:\Documents and Settings\linzhizhong\My Documents\Visual Studio 2005\Projects\projectDemo\projectDemo\builder\BMWBuilder.cs 7 18 projectDemo
<br>
<br>这时为什么
--------------------------------------------------------
阿牛 - 专注Web开发 2008-12-05 11:48
等到花儿也谢了,怎么不继续了,这么好的书...
icoolu 2008-11-18 19:12
学习中……
sailer 2008-11-06 17:11
谢谢,又一次学习了Façade模式
gaga 2008-09-25 18:16
感谢 KiddLee!
终于对prototype有点理解了。
我觉得prototype的重点在于:只要你传递一个prototype实例到你的run函数中,那么在run函数中就可以创建N个prototype的新的实例。只要clone方法是深复制。那么你创建的实例就可以完全独立。不会修改了这个实例的值,其他的值也跟着变。这样在run函数中就不用不断的用new去创建实例。这样做的好处是面对接口编程,也就是依赖倒置。
纯属个人观点。献丑...
刚学模式不久,望多多指教。
lisen 2008-09-16 21:46
谢谢 。学习了
柳生飘絮 2008-08-25 16:00
GOOD
赵岩 2008-08-12 08:41
很不错 加油
楼主
正好学设计模式,太好了 2008-07-25 09:33
努力学习的小熊 2008-07-15 09:02
我收了,哈哈:)
valkyrie 2008-07-08 16:45
感谢楼主分享心得,不过提个小意见……
介绍到class Manage时,在Run函数中,相当于是保存各个protoType实例,不需要用到clone吧,例子里面使用clone的需求没提到,因为没有新的实例需要产生,我觉得可以改成:之后某人又开了第二辆同样的车过来……然后添一个AddRun(),这样就必须要用到clone不可了。
tgゞ 2008-06-16 15:25
ゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞゞ
KiddLee 2008-05-27 12:51
@boliu
不好意思,这半年一直比较忙,我会继续写完他的