关于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 阅读(1584) 评论(9)  编辑 收藏 所属分类: C. Design Patterns

评论

#1楼  2006-09-21 17:17 David.Li      

呵.我很支持LZ的观点,我本人在看设计模式时也是觉得太过于面向对象.
不否认,面向对象是有很多好处,但有时就程序维护灵活性来讲的话,很多时候我是放弃完全面向对象的.呵...   回复  引用  查看    

#2楼  2006-09-21 17:58 barton131420      

同意楼主观点。设计模式是前人对某些特定场景特定处理方式的一种总结,如果不理解相关的场景就无法理解设计模式,强行去“学习”它,只会令设计模式庸俗化。事实上,23种也只能概括常用的模式,并不是说全部就这些模式了。

另外,纠正一下:
应该将var FCForm: TCForm;移到implementation的后面,否则因为可以修改FCForm而无法实现“单件”。

说到“单件”,Delphi从第一个版本就提供了Application、Screen、Printer等五个全局对象并延续到最后一个版本。它们无疑都是Singleton模式。   回复  引用  查看    

#3楼  2006-09-21 21:57 Zhongkeruanjian      

面向对象设计的过程就是敏捷与重构的过程,没有人要求你一开始就必须完全符合设计模式,如果这样的话,反而太重,一个原则:适用当前需求就OK,只是在系统的不断变化时,变化会促你重构,这时候你自然会想起设计模式(其实也是前人设计的经验而已),模式只不过是给你一些模板而已,又没有谁强迫你一定那么做。   回复  引用  查看    

#4楼  2006-09-21 22:39 Zhongkeruanjian      

我总感觉导致某一部分人反感设计模式的一个最大原因是那个第一个翻译Design Pattern的那个鸟人。如果把Pattern翻译成模板或者典范多好。这样就不会让模式这个词这么容易引起误导。   回复  引用  查看    

#5楼 [楼主] 2006-09-22 08:08 Voidclass      

有一点点意外, 没想到有这么多朋友持支, 谢谢!   回复  引用  查看    

#6楼 [楼主] 2006-09-22 08:12 Voidclass      

@barton131420
谢谢! 纠正.   回复  引用  查看    

#7楼  2006-09-22 10:43 木野狐[匿名]      

诸位都着相了。呵呵

要么就去身体力行的学习,实践它。
要么就写相关的研究文章。
个人认为说太多话没用的,鄙夷、庸俗化、神话等种种想法都是不对的。   回复  引用  查看    

#8楼  2006-09-22 10:44 CrazyCoder[匿名]      

呵呵,看来只要心中有剑就可以了。   回复  引用  查看    

#9楼  2007-05-26 01:35 jj [未注册用户]

Zhongkeruanjian:说得好,这个鸟人的翻译是有不太好的影响的。   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-09-22 08:10 编辑过


相关链接:
 

导航

统计

与我联系

搜索

 

常用链接

留言簿(2)

我参与的团队

随笔分类(18)

随笔档案(18)

收藏夹(1)

友情博客

积分与排名

最新评论

阅读排行榜

评论排行榜