日期:2014-05-20  浏览次数:20788 次

设计模式的误区,Java程序员对设计模式的诋毁及滥用
本帖最后由 Clonne 于 2012-07-07 18:26:08 编辑 首先,设计模式是一种程序设计的方法,指的是某一领域/类型的程序的设计方法。

所有的设计模式都是在前人/以往软件的基础上总结的,这一点需要非常注意。

Java程序员对设计模式第一个诋毁的就是:用设计模式。他们会在一个软件中说用工厂模式、用代理模式、用xx模式。然而实际上,设计模式不是让你来用的,设计模式不是实体,不是规范,要记住设计模式不是规范、规则、教条,从来就没有“用这个设计模式”这样的说法。

设计模式是体现,要知道设计模式首先是软件中一种设计的体现,所以才叫设计模式。而“用这个设计模式”的的说法则是本末倒置,完全是对设计模式的诋毁和滥用,或者说是误人子弟。在任何一个软件都都能体现出设计模式,大家见到的23个常见的设计模式,是通过几十年的软件开发经验积累出来的一套设计方法的总结,设计模式不是规范、不是贵规则、不是教条、不是物品,不是说“用这个设计模式”你就真的设计模式了,其实是你的软件的整体设计体现出哪些设计模式,而不是本末倒置。

为什么我说本末倒置,因为Java程序员特别爱对工厂模式、xx模式直接强制的表达为类,而且直接粗暴的取名为xxxFactory,然后整个软件里面充斥着大量的xxxFactory、xxxWrap等这些莫名其妙的类名,我可以直接肯定的说这不但是本末倒置,更是对设计模式、Java、程序开发整个领域的诋毁。为什么我这么说,因为首先设计模式是体现,而且是对以往软件的总结,在设计模式之前可不会有xxxFactory、xxxWrap这些名称,但是设计模式依然是设计模式,软件依然体现出来。而现在设计模式摆上明处了,就直接取xxxFactory这样的名了,这根本是滥用。

为什么我会对一个类的取名这么反感,因为我看到了设计模式的悲哀、Java的悲哀,还有Java程序员的愚蠢。设计模式并不是提出之后才有的,设计模式一开始就存在,设计模式是方法,是总结,是体现。而且,更重要的一点,设计模式是隐形的,然而现在的Java程序员特别喜欢把设计模式放到明处,好像不这样就不舒服一样。

就像数据结构一样,数据结构也是隐形的,模块a用什么数据结构,和模块b没有任何关系,这两个模块通过接口交流,但是完全不需要知道对方用什么数据结构这些乱七八糟的东西,数据结构从来都是隐藏在接口后面。

然而现在的Java程序员愚蠢到要把该隐藏的摆到明处,还特别骄傲。我可以肯定的说,设计模式被Java的程序员滥用了,本末倒置了,完全错了。第一,设计模式是体现,别说Java,就是汇编、机器码,依然有设计模式,因为设计模式不是库、不是规范、不是教条,是体现,是方法。然而我却总是看到《Java设计模式》这类哗众取宠的东西,好像Java中的设计模式就高贵一样,你们这是会Java惹上骂名。

可以说,我是喜欢Java的,但是我不喜欢那些自以为是的用着Java的程序员,我没有Java的经验,只用Java写过一个Web服务器,但是我可以肯定的说,我比那些滥用、诋毁设计模式的人更有资格说自己是Java程序员。

总结:

1.设计模式是方法

2.设计模式是对几十年软件开发经验的总结

3.设计模式是隐形的

4.设计模式是通过软件设计中体现出来,而不是用
------最佳解决方案--------------------
谨记:重构趋向模式,而不是滥用模式.

------其他解决方案--------------------
哦,我开始懂了我的愚笨...我不该
------其他解决方案--------------------
错误重复1000遍就是对的
------其他解决方案--------------------
“为什么我会对一个类的取名这么反感,因为我看到了设计模式的悲哀、Java的悲哀,还有Java程序员的愚蠢。设计模式并不是提出之后才有的,设计模式一开始就存在,设计模式是方法,是总结,是体现。而且,更重要的一点,设计模式是隐形的,然而现在的Java程序员特别喜欢把设计模式放到明处,好像不这样就不舒服一样。”
    总结一句话,这样取名字你不舒服了。将工厂类用XXFactory的类名表明,能够让别人一目了然,让人们仅需要看类图就能够了解内部的实现机制,何乐而不为呢?难道活用设计模式必须纠结于这种表面的东西?
    还有,设计模式并不仅仅是方法,其中的精华是渗透在里面的OOD的准则,设计模式只是方法,让你更好地理解这些准则的方法。
------其他解决方案--------------------
说得挺不错的
------其他解决方案--------------------
相当认同楼主的观点. 现在周围太多太多的人为了模式而编程. 拿到一个需求往往不自己去思考怎么去实现.而是拿着一本<<设计模式>>硬生生的找 究竟哪个模式适用于我现在的需求. 
最反感某些人写代码之前总是在反复说, 我实现这个功能要用到XX模式.
------其他解决方案--------------------
顶一个,说的很好
------其他解决方案--------------------
引用:
相当认同楼主的观点. 现在周围太多太多的人为了模式而编程. 拿到一个需求往往不自己去思考怎么去实现.而是拿着一本<<设计模式>>硬生生的找 究竟哪个模式适用于我现在的需求. 
最反感某些人写代码之前总是在反复说, 我实现这个功能要用到XX模式.

如果做了预先设计和详细分析,那么完全可以说:我实现这个功能要用到XX模式
------其他解决方案--------------------
你太偏激了,一个好的程序员,不仅仅要能写得出代码,更是要让人能够看得懂。