`
chjavach
  • 浏览: 464636 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

大讨论:学习和应用设计模式的经验、教训、疑问等

阅读更多

 

 

大讨论:学习和应用设计模式的经验、教训、疑问等

 

 

    在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 的建议了

 

     记住:日积月累,必有所成

 

 

 

 

 

 

先来抛个砖,玉们赶紧砸啊,哈哈!

   

93
35
分享到:
评论
24 楼 lm818 2013-04-30  
最近一直在看设计模式,发现写的那本研磨真的不错,容易理解,能看的到实际中的用处。博主继续加油多写好书。
23 楼 soualliron 2012-11-14  
国人就会溜须拍马,文章冠题“大讨论”,下面全是附会之音,无切实有用之词,建议屏蔽这些水贴,真正地静下心来讨论技术
22 楼 happenZheng 2011-01-02  
如醍醐灌顶!
其实,很多人都只是因学设计模式,而学设计模式,抱着好像你“学”了设计模式,就比别人高一个level,没有在思想上去汲取设计模式的精华。其实,我也是这类人
21 楼 jiangshaolin 2010-12-20  
看你出了本书,于是跑你博客业看了一下。

设计模式不是看书看出来的,不是讨论出来的,讲了一堆,我只讲一句话:设计模式是为了应付需求变更,programmer不断的重构出来的。


这样,我们要如何学习,如何才算真正掌握,还需要讨论吗?
20 楼 lwp2000 2010-11-17  
博主的深厚功底很让我佩服,能真正站在广大学习者的角度去抛砖引玉,很是让人敬佩。通过长时间以来对模式的追逐和思考,我个人的体会是:学好模式的关键就在于千万不要拘泥于具体实现方式,一定要宏观的整体看待,在思想层面进行把握控制。这只是我个人的一点体会,继续学习。
19 楼 TeddyWang 2010-09-27  
继续学习,围观中……升华
18 楼 chjavach 2010-09-25  
snow8261 写道
先从那个开源系统看起比较好呢?


   先找简单点的,小一点的,呵呵。不过说实话,写得好的这些开源框架,好像都不算小。有人看过Junit说不错,主要是不算大,你可以尝试看看,我没有看过Junit,因此不是很确定是否适合,小小建议,姑妄听之
17 楼 chjavach 2010-09-25  
wjapollo 写道
小弟不才,斗胆发言。设计模式的应用确实是个让我头疼的问题。毕竟学以致用才是我们学习设计模式的目的。但是现在很多的框架已经将很多的模式和功能都封装进去,我们实际开发中能用到设计模式的地方不是很多。所以我觉得是不是可以从这些地方下手:

1.仔细研磨各种设计模式,去体会和理解它的设计思想和使用场景。

2.试着去看看各种框架的源代码,去体会和理解下各种模式在框架中的应用。这里会有各种模式的组合使用,可以更深层次体会模式的灵活应用。

3.可以试着不用框架去开发代码,尝试着自己用模式去开发个项目,或者可以直接写个框架玩玩。

以上3点只是我的个人体会,而这3点需要反反复复的去做,并不是做个一次二次就OK了。
不对之处还望各位不吝赐教,小弟献丑了。


    你的建议相当不错,很有体会呀!
    不过在实际的开发中,能用的设计模式的地方也还是很多的,只是要静下心来思考,才容易用上并用好。
     而在实际开发中,主要是在压力下开发,大都草草了事,时间紧,任务重,根本容不得你精心设计和思考,所以很多地方也就跳过去了。
16 楼 wjapollo 2010-09-23  
小弟不才,斗胆发言。设计模式的应用确实是个让我头疼的问题。毕竟学以致用才是我们学习设计模式的目的。但是现在很多的框架已经将很多的模式和功能都封装进去,我们实际开发中能用到设计模式的地方不是很多。所以我觉得是不是可以从这些地方下手:

1.仔细研磨各种设计模式,去体会和理解它的设计思想和使用场景。

2.试着去看看各种框架的源代码,去体会和理解下各种模式在框架中的应用。这里会有各种模式的组合使用,可以更深层次体会模式的灵活应用。

3.可以试着不用框架去开发代码,尝试着自己用模式去开发个项目,或者可以直接写个框架玩玩。

以上3点只是我的个人体会,而这3点需要反反复复的去做,并不是做个一次二次就OK了。
不对之处还望各位不吝赐教,小弟献丑了。
15 楼 snow8261 2010-09-22  
先从那个开源系统看起比较好呢?
14 楼 chjavach 2010-09-20  
EnterLee 写道
最近都被忙的晕头转向的了,都好久没有开博主的文章了,顶起。咋这个这么多踩呢?都啥子人啊,难道看到博主以前好的文章都给忘记了吗?再说博主的这篇也没有什么不好的啊。从某种角度讲博主是在帮助我们学习设计模式帮助我们解决问题,帮助我们理解和在实际运用设计模式。


  呵呵,那些踩是一个上午出来的,这么密集,几乎可以认为是恶意的,反正没有什么有用的建议或意见,就是为了踩而踩,或许这就是“无知的暴力”。
   对模式的认识不如你,写文章的水平也不如你,但是我能踩你,还可以号召马甲来踩你,哈哈。
   因此,淡定,不要去管他们了。
   只是留下一个遗憾,本想提供一个大家交流的平台,没有交流起来,憾事!
13 楼 EnterLee 2010-09-18  
一如既往的关注博主的文章,一如既往的支持....................,非常感谢博主的无私奉献、分享。在这个经济社会没有人应该传授你什么、教你什么。
12 楼 EnterLee 2010-09-18  
最近都被忙的晕头转向的了,都好久没有开博主的文章了,顶起。咋这个这么多踩呢?都啥子人啊,难道看到博主以前好的文章都给忘记了吗?再说博主的这篇也没有什么不好的啊。从某种角度讲博主是在帮助我们学习设计模式帮助我们解决问题,帮助我们理解和在实际运用设计模式。
11 楼 chjavach 2010-09-16  
juda 写道
楼主:
    我觉得我们身边不缺少技术大牛,但像你这样有思想的技术大牛可真找不到几个。有时候我想不明白为啥美国,日本的程序员技术也那样,可是人家的产品水平很高。通过您的这个博客就能看到一些国人的问题了。
    鲁迅先生的文章批评国人的冷漠特别深刻,看来这个特性很难改变啊。不过楼主不要灰心,要都是这样的人,我们就去死好了,活在这样的社会里没意思。不过还是有一部分朋友很不错的。就是这部分人让我们看到了些些希望,楼主加油吧。
    技术的积累只需要10来年或者几十年,但是文化的积累可能需要上千年,楼主淡定。


  呵呵,已经习惯了,淡定,淡定!

  谢谢你的支持,本想通过讨论,让更多的朋友受益,人不领情,也就罢了。于我而言,都已经是过来人了,无所谓了。
10 楼 juda 2010-09-16  
楼主:
    我觉得我们身边不缺少技术大牛,但像你这样有思想的技术大牛可真找不到几个。有时候我想不明白为啥美国,日本的程序员技术也那样,可是人家的产品水平很高。通过您的这个博客就能看到一些国人的问题了。
    鲁迅先生的文章批评国人的冷漠特别深刻,看来这个特性很难改变啊。不过楼主不要灰心,要都是这样的人,我们就去死好了,活在这样的社会里没意思。不过还是有一部分朋友很不错的。就是这部分人让我们看到了些些希望,楼主加油吧。
    技术的积累只需要10来年或者几十年,但是文化的积累可能需要上千年,楼主淡定。
9 楼 sd1992585 2010-09-14  
受益匪浅~~精辟 该沉下心来学下设计模式了~~
8 楼 chjavach 2010-09-14  
faye.feelcool 写道
拍个砖。
忘掉模式,才能用好模式。
没变化,没模式;没问题,没模式


你这不就是我说的“无招胜有招”嘛,要想无招,先要忘记招数,呵呵。
可是要达到这个境界,有难度啊
7 楼 faye.feelcool 2010-09-14  
拍个砖。
忘掉模式,才能用好模式。
没变化,没模式;没问题,没模式
6 楼 3shouxing 2010-09-14  
  学习设计模式快一年了,现状是:好像懂一些模式,但是不会到项目中用,不是没有机会,而是不会!
  分析了一下我的教训,为何学了这么长时间,还是得门而不入,我感觉有两点:

1:看了很多比较“差”的书和资料
    刚开始,什么都不知道,什么资料都看,贪图有趣,简单,看了好多这样的书和资料。结果发现除了了解到设计模式的一些基本概念外,对于真正的编程毫无帮助。倒是记住了一堆的神话故事啊,有趣的对白啊,诙谐的三国之类的东西。
    也就是说,没有找到好的、合适的资料来学习,因而导致对设计模式理解深度严重不足。当然也不是说没有好的,不多,比如那本headfirst设计模式就不错,跟博主比起来,就缺少跟实际项目结合的内容,所以,学完过后,还是不大会用。
    还好博主出现了,明灯啊! 博主的文章做到了简单、有趣、深入、实用,尤其是以实际项目做背景来讲解模式,真是太好了

2:实战经验太少
    这也是我自己感觉到的一个问题,由于做过的东西太少,见过的也不多,因而看到每个设计模式的时候,不能够想到能应用上这个模式的场景,更不要说想到如何用了。有时候别人说什么地方,可以用什么模式,我也能理解,就是别人不说,自己就傻眼,完全想不到。

这个怎么办呢?有没有速成的办法?请各位兄弟支招!
5 楼 有事没事上QQ 2010-09-13  

相关推荐

    应用性本科水保专业C语言循环结构教学实践探讨.pdf

    7. 反馈与总结:对学习成果进行评估,总结经验教训,巩固所学知识。 这种教学模式旨在提高学生的实践能力和创新能力,符合应用型本科教育的目标,即培养具有扎实实践技能和创新思维的高级应用型人才。通过这种方式...

    牛客校招面试题(附答案与解析)测试篇.zip

    4. 设计模式:了解常见的设计模式,如单例、工厂、观察者等,并能在实际场景中应用。 总结,这份《牛客校招面试题(附答案与解析)测试篇》资料全面覆盖了测试、开发、面试技巧等多方面内容,是求职者理想的备考...

    计算机教学中学生实践能力和创新精神的培养_0.doc

    项目完成后,组织学生进行成果展示和评价,鼓励他们反思学习过程中的经验和教训。 #### 四、利用网络资源,培养学生创造性学习的能力 网络资源为学生提供了丰富的学习材料和技术支持。合理利用这些资源可以帮助...

    淘宝客服培训体系-2页.docx

    - **设计原理**:款式设计、色彩搭配、图案应用等方面的基本原则。 - **洗涤与保养**:不同材质衣物的清洗与保养方法。 - **测量方法**:准确测量客户身体尺寸的方法,以便提供合适的尺码建议。 - **尺码标准**:...

    北航云计算公开课11 OpenStack in Sina - BUAA.pdf

    - **技术实践分享**:通过参与各种研讨会和技术交流活动,分享自身在部署和维护OpenStack过程中的经验和教训。 - **代码贡献**:积极参与开源社区活动,为OpenStack项目贡献代码,帮助改进现有功能并开发新功能。 - ...

    高质量C++编码规范

    - **组合**:探讨了组合模式的优点和应用场合。 #### 第11章:其它编程经验 - **使用const提高函数的健壮性**:阐述了如何利用const关键字来增强代码的安全性。 - **提高程序的效率**:提供了一些提升程序运行效率...

    计算机网络课程信息化建设的实践研究.docx

    通过这种方式,可以激发学生的学习兴趣,促进知识的深入理解和应用。 #### 毕业设计管理系统 毕业设计管理系统旨在为学生提供一个高效、规范的毕业设计指导与管理平台。该系统通常包括但不限于以下功能: 1. **...

    物理教研活动记录文稿.doc

    **期中质量检测分析**:4月26日的活动对期中质量检测进行了分析,每位老师分享了教学经验和教训,通过评估结果调整教学策略,以提升后半学期的教学效果。\n\n这些教研活动展示了物理教师团队对教学方法的持续探索和...

    软件测试系列最佳实践

    - **4.3 基于UML视图的测试用例设计**:讨论了统一建模语言(UML)在测试用例设计中的应用,特别是通过UML视图来指导测试设计的过程。 - **4.4 小结**:总结了测试用例设计的重要性和方法,强调了设计高质量测试用例...

    华为面试笔试题集合之精华

    - **多次面试经历**:分享了一位求职者在华为经历了多次面试的经历,包括成功的经验和失败的教训。 **5.2 真实体验** - **内部环境**:描述了华为的工作环境、企业文化等实际情况。 - **日常工作**:介绍了日常...

    自考(谈判与推销技巧)真题试题及答案解析(一).docx

    是一种管理机制**:涉及流程设计和执行。选项**C. 是一种管理原则**的表述不够准确。 #### 二、多选题知识点解析 **23. 广义的谈判利益** - **A. 利润空间**:经济利益。 - **B. 投资回报**:经济效益。 - **C. ...

Global site tag (gtag.js) - Google Analytics