`
chjavach
  • 浏览: 464666 次
  • 性别: 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
分享到:
评论
4 楼 shenmifeidie 2010-09-13  
博主说得很好,我都不知道说什么了,还是友情支持一下,哈哈
3 楼 chjavach 2010-09-13  
gzj20091102 写道
我技术水平很一般,所以我不便发表言论,但是现在我在您的前头下已经踏踏实实的在学习设计模式了,非常感谢您,期望您后续的大作!真心的谢谢您!我已经号召同事们在学习您写的文章了,影响一批人啊!


谢谢捧场!
你们也可以谢谢你们自己学习的经验啊,教训啊,方法啊,心得体会阿什么的,讨论嘛,不是比技术水平的时候,哈哈

主要是大家都谈出来,会共同进步的。
2 楼 gzj20091102 2010-09-13  
gzj20091102 写道
我技术水平很一般,所以我不便发表言论,但是现在我在您的牵头下已经踏踏实实的在学习设计模式了,非常感谢您,期望您后续的大作!真心的谢谢您!我已经号召同事们在学习您写的文章了,影响一批人啊!

1 楼 gzj20091102 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