关于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中。而这时,往往需要子窗体只被创建一次。我们一般是怎么做的哪?

子窗体:

unit CFrm;

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  阅读(1894)  评论(9编辑  收藏  举报

导航