robbin谈如何学习设计模式
源自:http://www.kuqin.com/beginner/20054.html
备注:设计模式的根本也是为了代码重用,那只要你做到了很好的代码重用,你是否是否了GOF 设计模式23种之一根本不重要,首先是目标明确,再寻找有效的手段,而不是先我知道一种很好的方法,我要把他运用到那里去。
随便谈谈我对设计模式的看法吧。我极度反感言必称设计模式,什么要学好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。这样就够了。如果你告诉你花了几个月去钻研设计模式,我只能告诉你,你在浪费青春。
总之,水平没到,学也白学,水平到了,无师自通。所以不要学设计模式,看一遍就用,用多了,你自己也可以总结设计模式了。
评论 |
dlee 2003-12-24 16:56
我比较赞同 robbin 的看法,虽然我学习设计模式花费了不少时间(一两个月吧)。设计模式应该象手边的工具箱一样,我需要一把尺子就拿一把尺子来用,需要一只圆规就拿一只圆规来用,没有必要神秘化。在有些场合,如果不可能发生大的变化,就不要用设计模式,而用更简单的代码来实现。拥抱变化并不意味着过度设计。 |
ozzzzzz 2003-12-24 16:58
ribbin |
孤魂一笑 2003-12-24 17:11
ozzzzzz: 实用点吧,设计模式的根本也是为了代码重用,那只要你做到了很好的代码重用,你是否是否了GOF 设计模式23 种之一根本不重要,首先是目标明确,再寻找有效的手段,而不是先我知道一种很好的方法,我要把他运用到那里去。 |
ozzzzzz 2003-12-24 17:29
robbin |
dlee 2003-12-24 17:43
我觉得理解了设计模式,再发现新的模式相对来说是比较容易的事情。但是如果完全不理解设计模式,自己也不容易发现新的模式,提高代码的重用性也是空谈。也许你自以为重用性已经最高了,但是别人用设计模式帮你重构一下后你发现居然还有那么多重用性可以提高。 |
zingers 2003-12-24 18:32
阎宏确实有把简单问题复杂化的tend,既使是入门,也是以简洁为胜,他这样子狂举传说故事 BANG如果用了他的图,那也是不太好,不过BANG后来删掉了。 |
孤魂一笑 2003-12-24 18:34
设计模式肯定是要用的。 再说一下阎博士的那本书,其实他在讲述设计模式之前的那些OO原则的讲述很不错。 |
robbin 2003-12-24 18:50
引用 设计模式的根本也是为了代码重用,那只要你做到了很好的代码重用,你是否是否了GOF 设计模式23 种之一根本不重要,首先是目标明确,再寻找有效的手段,而不是先我知道一种很好的方法,我要把他运用到那里去。 我觉得这句话真的说到我想表达的意思上了。只要你的代码结构良好,至于到底有没有所谓的设计模式,根本就是不重要的了。打个不恰当的比喻,一个好的杀手,他的目标就是一剑封喉,干脆利索的杀了目标,你管他杀人用的那一招究竟是华山派的什么剑法,还是嵩山派的什么剑法。达到目标就行了。而且你的剑法练到一定的程度,你可以自创剑法,这个世界绝没有你练熟了世界上的剑法,你就是绝顶高手的道理。至于你已经达到了高手的境界以后,一招一式无不合剑道之极致。,也就根本无所谓用什么招式了。 感觉自己在胡说八道,引人入歧途,不过这是灌水版,还好还好。 |
ozzzzzz 2003-12-24 19:32
robbin |
Anonymous 2003-12-25 12:49
设计模式我认为还是用出来的,就像Robbin说的那样,不需要去刻意的学习设计模式的多少种模式,只需要大体的了解一下每一种设计模式他之所以这样设计的好处,及大体的框架就ok了,那你每次进行设计或开发的过程中,或者在你遇到困惑的时候,就会不自觉地想到某种模式可以给自己带来方便和解决困惑,或者让别人能更好的看懂之类的好处。。。而且在开发和使用模式的过程中会慢慢的提高自己的这方面的水平。 |
potian 2003-12-25 21:54
虽然我上次和Dlee在那个贴子里面聊的时候说起过设计模式是基本知识,但从另一方面讲,设计模式的重要性其实怎么说都是不为过的。 |
ozzzzzz 2003-12-25 23:08
kent这个人据说人格魅力相当厉害,脑子也聪明(嘿嘿,我喜欢看他们的照片,比我秃的厉害,和他们比较起来我是个多发者)。 |
robbin谈如何学习设计模式相关推荐
- 浅谈自己学习设计模式的感受
对于开发工作者的世界,不管是开发讨论会上还是学习交流会上,更或者面试的时候,当提及设计模式,都会或多或少的让别人高看你一眼.为什么它会有这么强大的魅力呢! 有些人说,主要是因为设计模式太抽象,不好理解 ...
- 我学习设计模式的一些所想所得
设计模式一直饱受争议,很多人对设计模式推崇备至,但也有很多人认为设计模式误导了编程者,见(<解密"设计模式">). 我也只是一个普通的编程人员,这里只能谈一谈我在学习设 ...
- 浅谈php之设计模式基础
本人近期正在学习php,所以就以设计模式的基础来谈一下自己的一些看法 一:什么是设计模式 学习编程的应该很多都有听说过设计模式,经常是什么js的设计模式,php设计模式,那么什么是设计模式呢?通俗的讲 ...
- 2021年浅谈多任务学习
作者 | 多多笔记 来源 |AI部落联盟 头图 | 下载于视觉中国 写此文的动机: 最近接触到的几个大厂推荐系统排序模型都无一例外的在使用多任务学习,比如腾讯PCG在推荐系统顶会RecSys 2020 ...
- 趣谈 23 种设计模式(多图 + 代码)
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:javadoop.com/post/design-pattern 创建型模式 简单工厂模式 工厂模式 抽象工厂模式 单例模 ...
- 阿里大佬告诉我,想学习设计模式,得先学好这些硬核技能
写在前面 我们继续学习架构师技能,今天是本系列的第二篇,希望大家持续关注. 可能你不是科班出生,甚至大学都没念,没背景没关系.我们只要每天进步一点点,一个月.两个月.半年.一年....... 规划性的 ...
- 怎么学python-结合学习经历,谈一谈如何学习Python
结合自己的学习经历,谈一谈如何学习Python吧. 入门阶段 Python其实语言本身已经很接近自然语言了,所以入门其实并不麻烦.如果你是从未接触过编程的萌新,给你推荐一门Udacity CS101, ...
- 刘未鹏谈如何学习算法
2019独角兽企业重金招聘Python工程师标准>>> 刘未鹏谈如何学习算法,很有指导意义,特摘录一段于此. 那到底什么样的才算是授人以渔的呢?波利亚的<如何解题>绝对算 ...
- 小菜学习设计模式(五)—控制反转(Ioc)
写在前面 设计模式目录: 小菜学习设计模式(一)-模板方法(Template)模式 小菜学习设计模式(二)-单例(Singleton)模式 小菜学习设计模式(三)-工厂方法(Factory Metho ...
最新文章
- GitHub开源的10个超棒后台管理面板
- 普通粒子群算法和优化方法
- android毛玻璃效果,Android 中实现毛玻璃效果
- C/C++基础知识点(二)
- verilog设计简易正弦波信号发生器_信号发生器工作原理是什么
- DEDE无简略标题时显示完整标题
- 安装chrome_Chrome 离线安装包下载
- Google 5.5 亿美金投资了京东?
- mysqlbinlog: unknown variable 'default-character-set=gbk'错误
- Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传
- jerasure 2.0译文
- jQuery源码学习(四)
- Pycharm官网下载安装
- 抠图算法(交互式)以及证件照的自动抠图
- 无头像不社交:浅析“头像设置”功能
- 七、torch.nn
- android 渠道 代码重复,Android Studio多渠道打包(示例代码)
- 华清远见-重庆中心-JAVA基础阶段技术总结/知识点梳理/个人总结/关于JAVA技术的解析(看法)/面试题解析
- 1. 系统符号与正则符号
- MySql如何储存和获取ip地址?以及mysql储存和获取ip地址的底层实现原理!!