关于Pattern的一点联想
本来是发在我的个人主页上的,但是想来想去还去发到博客园了。虽然这里是关注.NET技术的,但这是我对“设计模式”的一些看法。DUDU路过时看一眼,如果不妥,马上撤。
今天在博客园看了TerryLee的一篇文章,“.NET设计模式(1):开篇”。看过之后我也想就这个问题写一点东西出来。
提到“设计模式”,现在盲目夸大的人或者说盲目的人确实很多。我在招聘场就见过一个人在谈论个人情况的时候,眉飞色舞的讲:“我会设计模式”,然后“背出”经典的23种设计模式。当时我在想,“设计模式”在这个人的心目中是一种技术吗??
其实我们大多数的程序员都在过去有意或无意中从“设计模式”受益。“告诉一个同事我们是怎么完成了一个包含相当多技巧的程序,这样他就不用从头开始再做一次。”(《C#设计模式》)每个程序员差不多都有过这个的经历,只不过现在被冠以“设计模式”的名字而以。
接下来,我又看了TerryLee的第二篇文章,.NET设计模式(2):单件模式(Singleton Pattern)文中使用C#来描述Signleton Pattern。详尽、易懂。我见过的“设计模式”的文章大多使用C++/C#或Java来描述,感觉太OO了。看这篇文章的时候,我想起了使用Delphi时,关于MDI子窗体单一实例的问题。一般用Delphi做过类似“进销存”软件的朋友都有过这样的经历,就是把很多不同的录入窗体、各式各样的查询统计窗体集成在一个MDI Application中。而这时,往往需要子窗体只被创建一次。我们一般是怎么做的哪?
子窗体:
interface
uses
type
TCForm = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
function CForm: TCForm;
var
FCForm: TCForm;
implementation
function CForm: TCForm;
begin
if FCForm = nil then
FCForm := TCForm.Create(Application);
Result := FCForm;
end;
{ TCForm }
procedure TCForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
FCForm := nil;
end;
在MDI Application的MainForm中只要使用 CForm.Show(); 就可以了。
虽然不那么OO,但我个人认为归属到Singleton Pattern的范畴。也是可以的。虽然GoF的23种模式很OO,但没人要求“设计模式”一定OO。
PS:本文可能会让设计高手不屑,也可能会有很多人质疑。不想口水仗,只是写写我的想法。
posted on 2006-09-21 17:00 Voidclass 阅读(1895) 评论(9) 编辑 收藏 举报