- 浏览: 464691 次
- 性别:
- 来自: 北京
最新评论
-
lm818:
最近一直在看设计模式,发现写的那本研磨真的不错,容易理解,能看 ...
大讨论:学习和应用设计模式的经验、教训、疑问等 -
yjfnwxf:
看了楼主博文,真为自己汗颜呀。。。。努力,再努力
研磨设计模式之命令模式-5 -
fengdandanweikang:
...
研磨设计模式 之 观察者模式(Observer) 1——跟着cc学设计系列 -
tiansong163:
你好,对《研磨设计模式》中UML有一个图标不知道是什么意思?希 ...
跟着cc学设计 之 研磨设计模式 目录汇总贴 -
soualliron:
国人就会溜须拍马,文章冠题“大讨论”,下面全是附会之音,无切实 ...
大讨论:学习和应用设计模式的经验、教训、疑问等
大讨论:学习和应用设计模式的经验、教训、疑问等
在JavaEye发设计模式方面的文章也2个月了,获得了很多朋友的关爱和支持。这也说明了很多朋友对设计模式是很感兴趣的。
当然大家都知道,学习和掌握设计模式,是快速提高自身设计能力和技术水平的捷径,更是想要做设计和架构的朋友的必备知识!
可是很多朋友,尤其是初学但特好学上进的朋友,经常问这样的问题:
如何才能真正理解和掌握设计模式呢?
如何才能把设计模式真正应用到我的项目中呢?
这些设计模式单独看都好像会,就是不会综合起来用,该怎么办呢?
......等等好些这样的问题
因而,特开始本文,做一个大讨论,希望各位朋友不吝言辞,把自己学习和应用设计模式的 宝贵经验和惨痛教训,学习方法以及学习中的疑问等,一切跟设计模式相关的都可以拿出来讨论,相信对所有的朋友都会有收获。
先来抛个砖,玉们赶紧砸啊,哈哈!
一:如何才能真正理解和掌握设计模式呢?
1:我觉得先得约定一下,到底什么样的标准才算是真正理解和掌握设计模式,当然这个没有国际标准,只能一家之言了.
我认为, 真正理解和掌握设计模式的标准就是:深入领会和掌握模式的设计思想和设计手法的精髓,能够自如的把设计模式应用到实际项目中去,而且不会拘泥于模式的实现形式,通常会根据实际情况进行变形的应用,但是万变不离其宗,这个宗就是模式的设计思想和设计手法的精髓。通俗点说,就是很多朋友说的“无招胜有招”的境界。
2:如何才能做到呢?
我认为需要做到如下几条:
(1)全面、系统、深入的掌握设计模式的知识,这是基础
(2)在实际工作中,反复的尝试使用,并总结得失
(3)再回去学习设计模式的理论,并结合应用来深入思考
(4)然后再用、再思考
(5)直到这些设计思想和设计方式都融入我们自己的思维里面,当我们做东西的时候,能够自然而然的,随意的应用这些知识来解决实际问题,就好像是自己思维的一部分,那就算小有成就了。
二: 如何才能把设计模式真正应用到我的项目中呢?
我觉得这个要分两种情况来说,一种是有一定话语权的朋友,另外一种是完全没有话语权的朋友。
1:针对有一定话语权的朋友,可以采用小步快跑的方式在项目中加入设计模式。
具体点说,就是逐步来,先从自己熟悉的,能掌控的模式开始,经过自己的分析和判断,项目中的某个地方或某个功能,可以使用某个模式来解决,于是就尝试着把这个模式加入到项目中,然后及时总结经验教训。
如果第一个模式添加成功了,那就开始第二个,以此类推。类似于重构的方式,但是没有重构那么多的要求。
如果不成功,没有关系,也得到宝贵的教训了,那就总结一下,下次再来,反正项目有的是。
记住了,一定要勇于迈出第一步,其实很多模式都很简单,多用几回就会了。
2:针对没有话语权的朋友
一个方案,就是把自己思考的结果,汇报给有话语权的领导,然后尽力说服他让你去尝试,如果被否,嗬嗬,下一个方案。
第二种方案,“同步并行法”,具体点说,就是自己在家里构建一套跟上班相同或相似的环境,然后利用业务时间,按照自己的想法来尝试一下,并总结经验教训。这种方案就是累人点,但效果也不错,当初我就是用这个方案来学习设计模式的,呵呵。现在大家都有笔记本了,上班和下班用的环境都一样,因此会更方便。
三:这些设计模式单独看都好像会,就是不会综合起来用,该怎么办呢?
我觉得这个问题也要分两个层面来说,一个是真的达到能单独使用每个设计模式的水平,另外一个是根本没有掌握单个设计模式如何应用。
1:针对真的达到能单独使用每个设计模式的水平的朋友,建议:
(1)多看看设计得很好的开源项目,当然由于这些开源项目都很大,要有意思的挑选其中的某些模块来看
(2)细看的内容不宜挑得过大,太大了,根本看不过来,或者很难完全领悟;也不宜挑得过小,太小了看不出多个模式组合应用的精妙之处
(3)切忌不要看成源代码注释型的,很多朋友分析和研究开源项目,就局限在代码上,如何一步一步调用起来的,然后在代码上写注释,觉得这样自己就看懂了。
其实不然,真正看别人的系统,在没有设计文档的情况下,难度是非常高的,你需要通过看源代码,来分析别人的分析过程,设计过程,需要从整体系统上、从设计思路上去理解和把握,这样才能真正学到人家设计的精髓。
简单点说,比如把这个开源项目已经实现的功能作为需求交给你,你怎么样一步一步分析和设计,得到你看到的最终的样子,这个难度是很大的,必须要自身达到相当的高度才行。
(4)看到好的设计或者好的设计模式的组合,要多去模仿,然后再实际项目中多尝试使用,然后体会这样组合是否合适,同时深化自己对单个模式本质的领悟
小结一下:就是要多看设计较好、大小合适的项目;然后多尝试,多使用;然后就是多思考和多总结。
2:针对根本没有掌握单个设计模式如何应用的朋友,建议:
(1)平和心态,避免眼高手低
(2)切切实实从基础理论开始,深入掌握和领会每个模式的功能、基本结构、实现手法、适用场景、使用效果等等
(3)小范围的尝试1-3个模式的组合,估计刚开始,更多的模式组合也不太容易控制,别着急,慢慢来
(4)在应用中不断加深对设计模式的理解,为综合应用这些模式打下坚实的基础
(5)到了一定程度,就可以参看 1 的建议了
记住:日积月累,必有所成
先来抛个砖,玉们赶紧砸啊,哈哈!
评论
其实,很多人都只是因学设计模式,而学设计模式,抱着好像你“学”了设计模式,就比别人高一个level,没有在思想上去汲取设计模式的精华。其实,我也是这类人
设计模式不是看书看出来的,不是讨论出来的,讲了一堆,我只讲一句话:设计模式是为了应付需求变更,programmer不断的重构出来的。
这样,我们要如何学习,如何才算真正掌握,还需要讨论吗?
先找简单点的,小一点的,呵呵。不过说实话,写得好的这些开源框架,好像都不算小。有人看过Junit说不错,主要是不算大,你可以尝试看看,我没有看过Junit,因此不是很确定是否适合,小小建议,姑妄听之
1.仔细研磨各种设计模式,去体会和理解它的设计思想和使用场景。
2.试着去看看各种框架的源代码,去体会和理解下各种模式在框架中的应用。这里会有各种模式的组合使用,可以更深层次体会模式的灵活应用。
3.可以试着不用框架去开发代码,尝试着自己用模式去开发个项目,或者可以直接写个框架玩玩。
以上3点只是我的个人体会,而这3点需要反反复复的去做,并不是做个一次二次就OK了。
不对之处还望各位不吝赐教,小弟献丑了。
你的建议相当不错,很有体会呀!
不过在实际的开发中,能用的设计模式的地方也还是很多的,只是要静下心来思考,才容易用上并用好。
而在实际开发中,主要是在压力下开发,大都草草了事,时间紧,任务重,根本容不得你精心设计和思考,所以很多地方也就跳过去了。
1.仔细研磨各种设计模式,去体会和理解它的设计思想和使用场景。
2.试着去看看各种框架的源代码,去体会和理解下各种模式在框架中的应用。这里会有各种模式的组合使用,可以更深层次体会模式的灵活应用。
3.可以试着不用框架去开发代码,尝试着自己用模式去开发个项目,或者可以直接写个框架玩玩。
以上3点只是我的个人体会,而这3点需要反反复复的去做,并不是做个一次二次就OK了。
不对之处还望各位不吝赐教,小弟献丑了。
呵呵,那些踩是一个上午出来的,这么密集,几乎可以认为是恶意的,反正没有什么有用的建议或意见,就是为了踩而踩,或许这就是“无知的暴力”。
对模式的认识不如你,写文章的水平也不如你,但是我能踩你,还可以号召马甲来踩你,哈哈。
因此,淡定,不要去管他们了。
只是留下一个遗憾,本想提供一个大家交流的平台,没有交流起来,憾事!
我觉得我们身边不缺少技术大牛,但像你这样有思想的技术大牛可真找不到几个。有时候我想不明白为啥美国,日本的程序员技术也那样,可是人家的产品水平很高。通过您的这个博客就能看到一些国人的问题了。
鲁迅先生的文章批评国人的冷漠特别深刻,看来这个特性很难改变啊。不过楼主不要灰心,要都是这样的人,我们就去死好了,活在这样的社会里没意思。不过还是有一部分朋友很不错的。就是这部分人让我们看到了些些希望,楼主加油吧。
技术的积累只需要10来年或者几十年,但是文化的积累可能需要上千年,楼主淡定。
呵呵,已经习惯了,淡定,淡定!
谢谢你的支持,本想通过讨论,让更多的朋友受益,人不领情,也就罢了。于我而言,都已经是过来人了,无所谓了。
我觉得我们身边不缺少技术大牛,但像你这样有思想的技术大牛可真找不到几个。有时候我想不明白为啥美国,日本的程序员技术也那样,可是人家的产品水平很高。通过您的这个博客就能看到一些国人的问题了。
鲁迅先生的文章批评国人的冷漠特别深刻,看来这个特性很难改变啊。不过楼主不要灰心,要都是这样的人,我们就去死好了,活在这样的社会里没意思。不过还是有一部分朋友很不错的。就是这部分人让我们看到了些些希望,楼主加油吧。
技术的积累只需要10来年或者几十年,但是文化的积累可能需要上千年,楼主淡定。
忘掉模式,才能用好模式。
没变化,没模式;没问题,没模式
你这不就是我说的“无招胜有招”嘛,要想无招,先要忘记招数,呵呵。
可是要达到这个境界,有难度啊
忘掉模式,才能用好模式。
没变化,没模式;没问题,没模式
分析了一下我的教训,为何学了这么长时间,还是得门而不入,我感觉有两点:
1:看了很多比较“差”的书和资料
刚开始,什么都不知道,什么资料都看,贪图有趣,简单,看了好多这样的书和资料。结果发现除了了解到设计模式的一些基本概念外,对于真正的编程毫无帮助。倒是记住了一堆的神话故事啊,有趣的对白啊,诙谐的三国之类的东西。
也就是说,没有找到好的、合适的资料来学习,因而导致对设计模式理解深度严重不足。当然也不是说没有好的,不多,比如那本headfirst设计模式就不错,跟博主比起来,就缺少跟实际项目结合的内容,所以,学完过后,还是不大会用。
还好博主出现了,明灯啊! 博主的文章做到了简单、有趣、深入、实用,尤其是以实际项目做背景来讲解模式,真是太好了
2:实战经验太少
这也是我自己感觉到的一个问题,由于做过的东西太少,见过的也不多,因而看到每个设计模式的时候,不能够想到能应用上这个模式的场景,更不要说想到如何用了。有时候别人说什么地方,可以用什么模式,我也能理解,就是别人不说,自己就傻眼,完全想不到。
这个怎么办呢?有没有速成的办法?请各位兄弟支招!
发表评论
-
私塾在线推出《一案贯通GoF设计模式》项目实战
2012-10-19 22:12 20《研磨设计模式》出版以来,包括iteye上的朋友,很多人 ... -
研磨设计模式 之 组合模式(Composite) 3——跟着cc学设计系列
2012-08-22 08:50 419815.3 模式讲解 15.3.1 认识组合模式 ... -
研磨设计模式 之 组合模式(Composite) 2——跟着cc学设计系列
2012-08-20 13:53 335615.2 解决方案 15.2.1 组合模式来解决 ... -
研磨设计模式 之 组合模式(Composite) 1——跟着cc学设计系列
2012-08-20 12:17 306815.1 场景问题 15.1.1 商品类别树 ... -
研磨设计模式 之 迭代器模式(Iterator)3——跟着cc学设计系列
2012-08-19 07:07 380114.3 模式讲解 14.3.1 ... -
研磨设计模式 之 迭代器模式(Iterator)2——跟着cc学设计系列
2012-08-18 03:48 260114.2 解决方案 14.2.1 ... -
研磨设计模式 之 迭代器模式(Iterator)2——跟着cc学设计系列
2012-08-17 18:26 10614.2 解决方案 14.2.1 ... -
研磨设计模式 之 迭代器模式(Iterator)1——跟着cc学设计系列
2012-08-17 10:38 202114.1 场景问题 14.1.1 ... -
私塾在线《研磨设计模式》,精品课程上线特大惊喜
2012-08-17 10:03 6014《研磨设计模式》——跟着CC学设计,视频课程在 私塾在线 ... -
研磨设计模式 之 观察者模式(Observer) 3——跟着cc学设计系列
2012-08-16 08:51 296612.3 模式讲解 12.3.1 认识观察者模式 ... -
研磨设计模式 之 观察者模式(Observer) 2——跟着cc学设计系列
2012-08-15 07:03 282612.2 解决方案 12.2 ... -
研磨设计模式 之 观察者模式(Observer) 1——跟着cc学设计系列
2012-08-15 07:03 210812.1 场景问题 12.1.1 订阅报纸的过程 ... -
跟着cc学设计系列 之 研磨设计模式 目录汇总贴
2012-08-14 14:49 36研磨设计模式 的 前言 ——跟着cc学 ... -
研磨设计模式 之 代理模式(Proxy)3——跟着cc学设计系列
2012-08-14 14:36 230511.3 模式讲解 11.3.1 认识代理模式 ... -
研磨设计模式 之 代理模式(Proxy)2——跟着cc学设计系列
2012-08-13 12:36 285811.2 解决方案 11.2.1 代理模式来解 ... -
研磨设计模式 之 代理模式(Proxy)1——跟着cc学设计系列
2012-08-13 12:35 214511.1 场景问题 11.1.1 访问多条数据 ... -
研磨设计模式 之 中介者模式(Mediator)3 ——跟着cc学设计系列
2012-08-11 11:50 120510.3 模式讲解 10.3.1 认识中介者模式 ... -
研磨设计模式 之 中介者模式(Mediator)2 ——跟着cc学设计系列
2012-08-09 08:23 142610.2 解决方案 10.2.1 中介者模式来 ... -
研磨设计模式 之 中介者模式(Mediator)1 ——跟着cc学设计系列
2012-08-09 08:23 146810.1 场景问题 10.1.1 ... -
研磨设计模式 之 原型模式(Prototype)3 ——跟着cc学设计系列
2012-08-08 08:14 15449.3 模式讲解 9.3.1 ...
相关推荐
7. 反馈与总结:对学习成果进行评估,总结经验教训,巩固所学知识。 这种教学模式旨在提高学生的实践能力和创新能力,符合应用型本科教育的目标,即培养具有扎实实践技能和创新思维的高级应用型人才。通过这种方式...
4. 设计模式:了解常见的设计模式,如单例、工厂、观察者等,并能在实际场景中应用。 总结,这份《牛客校招面试题(附答案与解析)测试篇》资料全面覆盖了测试、开发、面试技巧等多方面内容,是求职者理想的备考...
项目完成后,组织学生进行成果展示和评价,鼓励他们反思学习过程中的经验和教训。 #### 四、利用网络资源,培养学生创造性学习的能力 网络资源为学生提供了丰富的学习材料和技术支持。合理利用这些资源可以帮助...
- **设计原理**:款式设计、色彩搭配、图案应用等方面的基本原则。 - **洗涤与保养**:不同材质衣物的清洗与保养方法。 - **测量方法**:准确测量客户身体尺寸的方法,以便提供合适的尺码建议。 - **尺码标准**:...
- **技术实践分享**:通过参与各种研讨会和技术交流活动,分享自身在部署和维护OpenStack过程中的经验和教训。 - **代码贡献**:积极参与开源社区活动,为OpenStack项目贡献代码,帮助改进现有功能并开发新功能。 - ...
- **组合**:探讨了组合模式的优点和应用场合。 #### 第11章:其它编程经验 - **使用const提高函数的健壮性**:阐述了如何利用const关键字来增强代码的安全性。 - **提高程序的效率**:提供了一些提升程序运行效率...
通过这种方式,可以激发学生的学习兴趣,促进知识的深入理解和应用。 #### 毕业设计管理系统 毕业设计管理系统旨在为学生提供一个高效、规范的毕业设计指导与管理平台。该系统通常包括但不限于以下功能: 1. **...
**期中质量检测分析**:4月26日的活动对期中质量检测进行了分析,每位老师分享了教学经验和教训,通过评估结果调整教学策略,以提升后半学期的教学效果。\n\n这些教研活动展示了物理教师团队对教学方法的持续探索和...
- **4.3 基于UML视图的测试用例设计**:讨论了统一建模语言(UML)在测试用例设计中的应用,特别是通过UML视图来指导测试设计的过程。 - **4.4 小结**:总结了测试用例设计的重要性和方法,强调了设计高质量测试用例...
- **多次面试经历**:分享了一位求职者在华为经历了多次面试的经历,包括成功的经验和失败的教训。 **5.2 真实体验** - **内部环境**:描述了华为的工作环境、企业文化等实际情况。 - **日常工作**:介绍了日常...
是一种管理机制**:涉及流程设计和执行。选项**C. 是一种管理原则**的表述不够准确。 #### 二、多选题知识点解析 **23. 广义的谈判利益** - **A. 利润空间**:经济利益。 - **B. 投资回报**:经济效益。 - **C. ...