Decorator模式(孙悟空的七十二变) ( 积分: 100 )

老张

Unregistered / Unconfirmed
GUEST, unregistred user!
实在看不过去了,就王东东那破玩意儿,还敢拿出来到处丢人现眼。
你再十年可能还看不懂刘艺的书。
少来这里让人鄙视了
 

无泪

Unregistered / Unconfirmed
GUEST, unregistred user!
我研究接口的时间比较短,所以,还是不习惯用,我也知道,用接口的话,可以节省空间,但为了我研究方便,还是用我的习惯,写了一遍。(大家不要见笑,至于我写出来的还是不是那个Decorator模式,我不太清楚,因为我还没有学习模式!)
unit Unit2;
interface
uses
Dialogs;
type
TDasheng = class
public
procedure Shuazi;Virtual;abstract;
end;
THusun = class(TDasheng)
public
procedure Shuazi;override;
end;
THuashen = class(TDasheng)
private
FDasheng: TDasheng;
public
procedure Shuazi;
override;
end;
{
花儿——大圣化身之一,Concrete Decorator角色
}
THuaer = class(THuashen)
public
constructor Create(Dasheng: TDasheng);
procedure Shuazi;
override;
end;
{
鸟儿——大圣化身之二,Concrete Decorator角色
}
TNiaoer = class(THuashen)
public
constructor Create(Dasheng: TDasheng);
procedure Shuazi;
override;
end;
{
鱼儿——大圣化身之三,Concrete Decorator角色
}
TYuer = class(THuashen)
public
constructor Create(Dasheng: TDasheng);
procedure Shuazi;
override;
end;

implementation
{ THusun }
procedure THusun.Shuazi;
begin
inherited;
ShowMessage('老孙耍子去也!');
end;

{ THuashen }
procedure THuashen.Shuazi;
begin
FDasheng.Shuazi;
ShowMessage('摇身一变……');
end;

{ THuaer }
constructor THuaer.Create(Dasheng: TDasheng);
begin
FDasheng:=Dasheng;
end;

procedure THuaer.Shuazi;
begin
inherited;
ShowMessage('花儿开了……');
end;

{ TNiaoer }
constructor TNiaoer.Create(Dasheng: TDasheng);
begin
FDasheng:=Dasheng;
end;

procedure TNiaoer.Shuazi;
begin
inherited;
ShowMessage('鸟儿飞了……');
end;

{ TYuer }
constructor TYuer.Create(Dasheng: TDasheng);
begin
FDasheng:=Dasheng;
end;

procedure TYuer.Shuazi;
begin
inherited;
ShowMessage('鱼儿游了……');
end;
end.
窗体调用部分和楼主的一样!(我本来想去掉THusun类,TDasheng写为虚类,把THusun类中的内容写在TDasheng类中。但后来是还是没改)。
我最后是实现了楼主要实现的功能,但是不是Decorator模式的思想?????我不清楚了,请高手指点!!
To SS2000:
我想我这个应该是用类的多态实现的,还请指教!
本来楼主是想和大家一起讨论模式的,可没想到,却变成了DELPHI到底适不适合模式编程的问题!!!!!我怎么感觉好向回到了过去讨论C++ 与DELPHI的哪个时代???
大家既然也说了我也就说说我这个还没有学模式的的人对模式的存在的观点,有说的不对的地方请大家指正!欢迎批评!我会虚心学习的!
正如“设计模式:可复用面向对象软件的基础”,就是说在面向对象的基础上,可以实现重复使用,正如大师所说的“设计面向对象的软件那,而设计可重复使用的面向对象软件更难”。既然四人帮帮我们总结出了一些可重复使用的方法,那是我们高兴的事。
个人观点:我认为在面向对象中的设计模式,好象和面向过程中的算法,有些相似的地方,只不过解决的问题的层次不同罢了。
设计模式——解决重复使用,使我们不必在自己去长时间的思考这个“类”以后如何可以重复使用的问题。
算法——解决实际问题的方法,对于一些问题,有了算法,我们可以很容易的把问题解决,不用我们再思考别人已经想出来的方法,直接用别人的方法就可以解决实际问题了。
不知道我的这个观点对不对,如果不对,请大家指正!!!
对于大家的大部分说法我是同意的,毕竟DELPHI也是一个开发面向对象软件的,因此它也的考虑软件重复使用的问题,这必然要借鉴前辈们的经验了,不然自己想,可很费时间的,这样我们就使用了——设计模式了。
to yanyandt2 等不愿意讨论用DELPHI使用设计模式的
你们的观点,我赶完全同意。
但我也有一些观点,对于DELPHI有好多人把他归为数据库开发的软件类,可是对于数据库的可重复使用,我是一点头绪也没有(难道是我没有看设计模式的过),我们可以用设计模式解决数据库开发中的一些问题,但要真的做到——重复性使用,我是真的解决不了这个问题。还请大师们多多指教。
to chinaplate
"设计模式相当于《数据结构》,是内功;而各种OO语言只是外功。"
对于你说设计模式是内功,我没有意见,对于你说OO是外功,我的意见和你不一样了。
我认为OO也是内功,(你见过哪个人练外功,就能练出内功来的吗?),模式应该是建立在OO这个内功的基础之上,解决OO复用的方法!
我到同意moshengren的观点:“世上本没有模式,用的人多了也就成了模式”
这些模式都是经过前辈们一些好的解决问题的方法的总结。
什么是道?什么是名?无名天地之始,有名万物之母。我们可以叫它模式,也可以叫它别的。这个都是我们自己给他定的名字。
TO lich:
同意:“对于一种面向对象的语言来说,都是可以使用设计模式的,你自己在编程的时候,如果对面向对象稍微有点了解和应用的话,你就会不自觉的使用了某些设计模式”
如果可以的话,你也可以设计一个自己的模式出来!!!
 
C

czcn

Unregistered / Unconfirmed
GUEST, unregistred user!
弱弱的问一句.那
myfrm: TForm;
...
myfrm:=TForm1.create(...);
...
myfrm:=TForm2.create(...);
是不是也是一种模式呢?
我真的是那种只认识"模式"两个字怎么写的人.[:(]
 
B

bloodymary

Unregistered / Unconfirmed
GUEST, unregistred user!
一群牛人???
 
A

Activer

Unregistered / Unconfirmed
GUEST, unregistred user!
设计模式,本来就是说设计
怎么还有人居然要来拼命的讨论用Delphi是否合适实现模式
只要面向对象的设计语言,就可以用(是因为我们看到的这些设计模式大部分基于面向对象的程序设计语言来讨论的,模式对某种解决问题的好方法的一种总结)
如果连看设计模式都要讨论到是否涉及WinAPI 那会让提出设计模式的人晕上N遍(N>10)
 

小白菜

Unregistered / Unconfirmed
GUEST, unregistred user!
各位果然强啊,佩服 佩服
 
C

chinaplate

Unregistered / Unconfirmed
GUEST, unregistred user!
to 无泪
>你提到 "模式应该是建立在OO这个内功的基础之上,解决OO复用的方法!"
我基本同意你的这一观点,模式除了复用外,更重要的是使对象之间的协同工作更加有序、高效。
>我提到 "计模式相当于《数据结构》,是内功;而各种OO语言只是外功。"
我指的应该是“语言是外功”
我想我有个另一个的比喻
OO是基本功,象我们的词汇,我们可以用这些词汇来写一篇文章。要想写好文章就需要学点修辞方法了。而“模式”就相当于修辞方法。
也同样的,
文章写多了,你会自然地想多用些修辞方法,力求文章更优美,完美。
OO程序写多了,你也会自然地想将各种对象之间的关系梳理好,使其能更好的协同工作(建立和谐社会嘛:),你也会自然的想到了模式。

到这里,OO与模式都是泛泛而谈,并不与什么具体语言相联系。
具体的OO语言,就象我们表述一篇文章的方法,你可以口述,也可以书面表达,甚至你都可以用英语表达,它们之间的区别只是大同小异了。

我对“模式”的几个观点
1。你要反对模式,必须自己要熟悉模式,至少要用在某一段程序中,体会一下。决不人云亦云。
2。模式不拘泥于GOF,更不拘泥于某个具体模式的形式。如果你平时对某些对象的组织(甚至对某些语句的组织)自认为不错,而且自己还很常用这种组织方式,你也可以这样的“组织方式”也是模式,至少可以当作自己的私人专用模式:)
3。模式是提供另一种思考层面,时常问问自己:是不是能有一种好的模式来组织这些对象,以得到更好的扩展性,更高的效率。
4。一切以你自己系统的情况而定,尤其是做项目时,我想项目的进度、效率要原比“重用性”重要。但如果做某个类库,还是多靠靠模式的好。
5。模式是构建和谐社会的关键,是“以法治国”与“以德治国”在OO世界里的高度统一:)
唠叨完了。
 
J

jhwh

Unregistered / Unconfirmed
GUEST, unregistred user!
这么长的帖子,居然没见一个高人。
 
J

jxyghm

Unregistered / Unconfirmed
GUEST, unregistred user!
老贴,有意思。设计模式用对了就事半功倍,用的不合适就事倍功半。
yanyandt2 也有一定的道理,只是说不要到处套模式。
哈哈。
 
E

erenjian

Unregistered / Unconfirmed
GUEST, unregistred user!
俺還不同資格發貼..
但俺可以 頂........................................
 
S

softdream

Unregistered / Unconfirmed
GUEST, unregistred user!
嗯,顶一下,有空也看看模式。
 
顶部