随便谈谈我对设计模式的看法吧。我极度反感言必称设计模式,什么要学好OO,必先学好Gof这类的屁话。坦率说我也从来不刻意的去学习设计模式,我看到身边的朋友花那么多钱去买一大本厚厚的阎博士的设计模式的书,心里总是叹息一下,设计模式不是学出来的,是用出来的。设计模式应该怎么学习?应该我花两个小时给你讲一下,告诉你每个模式是怎么回事,应该在什么场合适用就OK了,这样就学完了。
然后你在自己的工作实践中,碰到了这类问题,想起来自己曾经听xx说过可以使用xx模式,于是乎,你再把阎博士的书打开看看(或者把banq的文章翻出来看看),进行 copy & paste。这样就够了,充分够了。你真的完全没有必要把模式看的多么神圣,多么神秘,多么高深,它就是一个让你去copy & paste的代码片断,如此而已。所以Gof的书那么薄,因为作者知道设计模式本来就不是一个可以学出来的东西,所以Sun的J2EE模式就算加上了冗长的代码和罗嗦的描述,也是薄薄一本。把一本模式的书写的如此之厚,我认为已经失去了学习它的价值了。
而且“设计模式”这个词汇广义的来说指的是适用于特定场合的经过验证是良好的解决方案。其实只要你有足够的工作经验,就算你没有学过设计模式,你写出来的代码也会不知不觉符合某种模式的要求的。因为你经过很多实践经验,你已经积累了很多,你知道在什么场合代码应该怎么写,那么“在什么场合代码应该怎么写”这本身就是设计模式。
所以我认为没有必要刻意去学习设计模式,也没有必要把设计模式当做多么神圣的东西。只要你的OO编程经验达到了一定的水平,设计模式本来就是无师自通的。如果你的编程经验很少,你就是把Gof背得滚瓜烂熟,到时候你一样用不出来。
设计模式就像围棋中的定式,如果你是高手,你下的棋自然而然的符合一些定式的走法,如果你是初哥,你就是背了几千个定式,只要对手不按照定式来走,你就一点都用不上。
再说Gof的23种模式只不过是设计模式的沧海一粟,Sun的J2EE有15种设计模式,你还要不要学,要不要背? 不说别的,Hibernate现在也出了20种设计模式了,那是不是说你不把Hibernate的20种设计模式背的滚瓜烂熟,你就不可能把Hibernate学好用好呢?
总结一下我的观点:
设计模式就是定式,碰到这种场合你才用得上,所以学习设计模式,你只需要花2个小时过一遍,脑子里面有个印象就赶快收手,到用的时候再去copy & paste。这样就够了。如果你告诉你花了几个月去钻研设计模式,我只能告诉你,你在浪费青春。
总之,水平没到,学也白学,水平到了,无师自通。所以不要学设计模式,看一遍就用,用多了,你自己也可以总结设计模式了。
评论 |
我比较赞同 robbin 的看法,虽然我学习设计模式花费了不少时间(一两个月吧)。设计模式应该象手边的工具箱一样,我需要一把尺子就拿一把尺子来用,需要一只圆规就拿一只圆规来用,没有必要神秘化。在有些场合,如果不可能发生大的变化,就不要用设计模式,而用更简单的代码来实现。拥抱变化并不意味着过度设计。 |
ribbin |
ozzzzzz: 实用点吧,设计模式的根本也是为了代码重用,那只要你做到了很好的代码重用,你是否是否了GOF 设计模式23 种之一根本不重要,首先是目标明确,再寻找有效的手段,而不是先我知道一种很好的方法,我要把他运用到那里去。 |
robbin |
我觉得理解了设计模式,再发现新的模式相对来说是比较容易的事情。但是如果完全不理解设计模式,自己也不容易发现新的模式,提高代码的重用性也是空谈。也许你自以为重用性已经最高了,但是别人用设计模式帮你重构一下后你发现居然还有那么多重用性可以提高。 |
阎宏确实有把简单问题复杂化的tend,既使是入门,也是以简洁为胜,他这样子狂举传说故事 BANG如果用了他的图,那也是不太好,不过BANG后来删掉了。 |
设计模式肯定是要用的。 再说一下阎博士的那本书,其实他在讲述设计模式之前的那些OO原则的讲述很不错。 |
引用
设计模式的根本也是为了代码重用,那只要你做到了很好的代码重用,你是否是否了GOF 设计模式23 种之一根本不重要,首先是目标明确,再寻找有效的手段,而不是先我知道一种很好的方法,我要把他运用到那里去。
我觉得这句话真的说到我想表达的意思上了。只要你的代码结构良好,至于到底有没有所谓的设计模式,根本就是不重要的了。打个不恰当的比喻,一个好的杀手,他的目标就是一剑封喉,干脆利索的杀了目标,你管他杀人用的那一招究竟是华山派的什么剑法,还是嵩山派的什么剑法。达到目标就行了。而且你的剑法练到一定的程度,你可以自创剑法,这个世界绝没有你练熟了世界上的剑法,你就是绝顶高手的道理。至于你已经达到了高手的境界以后,一招一式无不合剑道之极致。,也就根本无所谓用什么招式了。 感觉自己在胡说八道,引人入歧途,不过这是灌水版,还好还好。 |
robbin |
设计模式我认为还是用出来的,就像Robbin说的那样,不需要去刻意的学习设计模式的多少种模式,只需要大体的了解一下每一种设计模式他之所以这样设计的好处,及大体的框架就ok了,那你每次进行设计或开发的过程中,或者在你遇到困惑的时候,就会不自觉地想到某种模式可以给自己带来方便和解决困惑,或者让别人能更好的看懂之类的好处。。。而且在开发和使用模式的过程中会慢慢的提高自己的这方面的水平。 |
虽然我上次和Dlee在那个贴子里面聊的时候说起过设计模式是基本知识,但从另一方面讲,设计模式的重要性其实怎么说都是不为过的。 |
kent这个人据说人格魅力相当厉害,脑子也聪明(嘿嘿,我喜欢看他们的照片,比我秃的厉害,和他们比较起来我是个多发者)。 |
在这里,我是新人,对大家也不熟悉。 |
robbin 写道
随便谈谈我对设计模式的看法吧。我极度反感言必称设计模式,什么要学好OO,必先学好Gof这类的屁话。
我觉得要学好oo,必须先学好gof确实是屁话,如果一个人的oo经验足够,自己在任何场合都可以找到最适合的解决方案,是没有必要去花大量的时间来研究gof的那23种模式的,同意robbin的观点
robbin 写道
而且“设计模式”这个词汇广义的来说指的是适用于特定场合的经过验证是良好的解决方案。其实只要你有足够的工作经验,就算你没有学过设计模式,你写出来的代码也会不知不觉符合某种模式的要求的。因为你经过很多实践经验,你已经积累了很多,你知道在什么场合代码应该怎么写,那么“在什么场合代码应该怎么写”这本身就是设计模式。
robbin 写道
水平没到,学也白学,水平到了,无师自通。所以不要学设计模式,看一遍就用,用多了,你自己也可以总结设计模式了。 是这样的,不过对于一个没有多少oo经验的设计师来说,研究一下gof的设计模式,可以更好的理解oo,减少自己的摸索时间 |
我认为设计模式是给初学OO设计者的一个理念,就是代码需要有很好的可扩展性和可重用性。理念也就是一种理论,在实践中起指导作用的,但决不是用来生搬硬套的。初学者有了这种理念就会在实践中慢慢领会最实用的各种招数,甚至发展出新的套路来。所以,在学习JAVA一段时间后,应该看一下设计模式方面的书籍。 |
说的不错,设计模式这种东西,在国内好象也就是这两年才兴起的。原来,没有听说过(我孤陋寡闻了 )。不过,在接触过一段时间后,个人觉得还是有必要深入研究一下的,这样一方面对自己是一种提高,也可以,设计出更加健壮的代码。当然,我说的是有相当经验的程序员。对于初学者,我觉得还是不看为好,原因很简单,连接口和抽象类还没搞清楚是怎么会事,就去看这些东西,只会越看越迷。 |
Pattern 这种东西,要学习很容易.把书仍了,写代码去。代码看上去爽吗?不爽从新写写到爽为止。那就是模式了。 |
引用
Pattern 这种东西,要学习很容易.把书仍了,写代码去。代码看上去爽吗?不爽从新写写到爽为止。那就是模式了
很对!
引用
代码复用,扩展之类也都是屁话不要相信说这种话的人,唯一有用的就是你的代码比较好看
偏激了!不是这样的,写的代码比较多了,可以自己抽象出来很多可复用的类。有意识的运用一些模式,注重对代码的重构,对程序的可扩展性有很实在的好处,这些都是我自己的写代码做过的。 |
其实不就还是金庸小说笑傲江湖里面的道理,一个不懂武术的人,和独孤九剑都是无招,可是,中间有招的过程又如何能省?设计模式就是招,精通设计模式,到了通神境界,就是无招。可是中间的过程啊,能够有更加玄妙的招数,还是要学啊。至少比不会武功好啊。 |
不错,说的很对,一切来源于实践,即使你是在校的硕士也好,天天抱着本书狂啃,也只上字面上理解, 真正用到的精髓还是在实践里面,看书只是帮你了解大意而已,当你有需求时,在来对比分析,在来想这个时候要用到的方法,解决路径 那么将会觉得豁然开朗. 写出心声,谢谢 Robbin |
模式来源于实践, |
我认为设计模式还是要学的,(阎宏的书很不错哦)。 |
很多时候我觉得不能以一个高手的眼光去看待一些东西。没写过多少代码的人,你让他看n遍《设计模式》他也未必能记住多少,而一个有些年限的程序员,写的代码多了,他看一遍《设计模式》在看的过程中就会想起自己以前写的代码,所以他记得就比较劳!这些书,一句话,感觉自己看了有效果,那就是值得的,不然就是浪费时间了! |