我研究接口的时间比较短,所以,还是不习惯用,我也知道,用接口的话,可以节省空间,但为了我研究方便,还是用我的习惯,写了一遍。(大家不要见笑,至于我写出来的还是不是那个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:
同意:“对于一种面向对象的语言来说,都是可以使用设计模式的,你自己在编程的时候,如果对面向对象稍微有点了解和应用的话,你就会不自觉的使用了某些设计模式”
如果可以的话,你也可以设计一个自己的模式出来!!!