学习设计模式必须注意“活学活用”,设计模式不是教条,而是思路,生搬硬套设计模式还不如不用。打下牢固的程序设计语言基础、夯实自己的编程思想、修炼开发内功才能游刃有余地使用设计模式。有的时候,或许你根本不知道任何设计模式,不考虑任何设计模式,却写着最优秀的代码,即使从“模式专家”的角度来看,都是最佳的设计,不得不说是“最佳的模式实践”,这是因为你积累的很多实践经验,知道“在什么场合代码应该怎么写”,这本身就是设计模式。

要正确使用设计模式,建议参考以下几点:

1.需求驱动

需求驱动不仅仅是功能性需求,还包括性能需求及运行时的需求,如软件的可维护性和可复用性等方面。设计模式是针对软件设计的,而软件设计是针对需求的,一定不要为了使用设计模式而使用设计模式。在不合适的场合生搬硬套地使用设计模式反而会使设计变得复杂,使软件难以调试和维护。

2.分析成功的模式应用项目

对现有的应用实例进行分析是学习模式的一个很好地途径,应当注意学习已有的项目不仅是学习设计模式如何实现,更重要的是注意在什么场合使用设计模式。

3.充分了解所使用的开发平台

设计模式大都是针对面向对象的软件设计的,因此在理论上适合任何面向对象的语言。但随着技术的发展和编程环境的改善,设计模式的实现方式会有很大的差别。在某些平台下,某些设计模式是自然实现的,某些模式已经被平台所实现,某些模式存在的上下文已经消失。

这里的平台不仅指编程语言,还包括平台引入的技术。例如,Java EE引入了反射机制和依赖注入,这些技术的使用使设计模式的实现方式有了很大的改变。

4.在编程中领悟模式

软件开发是一项实践工作,最直接的方法就是编程。没有定式很熟却从来不下棋的围棋高手,也没有不会编程就能成为架构设计师的先例。对设计模式的掌握是水到渠成的事情。你可能是“顿悟”,也可能是“渐悟”,但前提必须有相当多的实践积累。当然,并不是不需要看书学习,但实践仍然是最需要重视的。

5.避免设计过度

设计模式解决的是设计不足的问题,但同时也要避免设计过度。一定要牢记简洁原则(Keep It Simple,Stupid,KISS),要知道,设计模式是为了使设计简单,而不是更复杂。如果引入设计模式使得设计变得复杂,只能说我们把简单问题复杂化了,问题本身不需要设计模式。这里需要把握的是需求变化的程度,一定要区分需求的稳定部分和可变部分。一个软件必然有稳定部分,这个部分就是核心业务逻辑。如果核心业务逻辑发生变化,软件就没有存在的必要,核心业务逻辑是我们需要固化的。对于可变的部分,需要判断可能发生变化的程度来确定设计策略和设计风险。要知道,设计过度与设计不足同样对项目有害。

如何正确学习和使用设计模式相关推荐

  1. 论机器学习的正确学习姿势

    论机器学习的正确学习姿势 策划 | 刘燕作者 | Caleb Kaiser翻译 | Sambodhi编辑 | Linda很多开发人员并没有机器学习领域的背景,在机器学习如火如荼的今天,没学过机器学习的 ...

  2. 从框架源码中学习结构型设计模式

    文章目录 从框架源码学习结构型设计模式 适配器模式 应用实例 案例一:dubbo框架日志适配器 Logger接口 日志实现类 Logger适配器接口 LoggerAdapter实现类 Logger日志 ...

  3. 解决DesignMode不能正确反应是否处于设计模式的问题

    VS自带的可视化窗体编辑器很好用,但是也有一些烦人的问题,比如: 无法编辑继承自虚基类或范型基类的Control/Form; 有时DesignMode这个属性不能正确反应是否处于设计模式--详细地说, ...

  4. 5分钟学习23种设计模式

    文章目录 5分钟学习23种设计模式 阿里巴巴开发手册 七大设计原则 设计模式类型 1.单例模式 2.简单工厂模式 3.工厂模式 4.抽象工厂模式 5.装饰器模式 6.适配器模式 7.观察者模式 8.外 ...

  5. 学会python需要数学吗_机器学习数学基础:学习线性代数,千万不要误入歧途!推荐一个正确学习路线...

    机器学习数学基础:学习线性代数,千万不要误入歧途!推荐一个正确学习路线 序言 写完<机器学习深度研究:机器学习中的高等数学/微积分及Python实现>,觉得十分对不起读者,写的自己都不满意 ...

  6. 正确学习奇门遁甲的方法!

    很多人知道奇门遁甲可能还是从电视中了解到的,看过这些关于奇门遁甲的影视剧后对奇门遁甲产生了浓厚的兴趣,这部分人就是属于与奇门遁甲有缘的人.与奇门遁甲有了缘分之后,如何才能找到学习奇门遁甲的正确方法呢? ...

  7. 如何正确学习 Node.js

    2017-12-14 我发了一篇文章<没用过Node.js,就别瞎逼逼>是因为有人在知乎上黑Node.js.那篇文章的反响还是相当不错的,甚至连著名的hax贺老都很认同,下班时读那篇文章, ...

  8. PAC Learning Framework可能近似正确学习

    Coffe Time ESP GAME用户做游戏的时候,对图片做语义标注 SAmple Complexity: How many training examples are sufficient to ...

  9. 大学才开始的ACM应该如何正确学习

    ACM(大学生程序设计大赛)现如今已经风靡大学校园.其感染度不仅局限于信息类专业,更是染指了理学类专业.这一项靠数学才能吃香的竞赛让许多大学生沉迷其中,感受到了算法和数学的魅力. 不过,言归正传,如果 ...

最新文章

  1. Create Geometry from WKT(转载)
  2. Mahout学习路线图
  3. java streamhandler_java中的Lamdba表达式和Stream
  4. socket网络编程tcp
  5. 利用NCO 3.0 调用SAP中的函数
  6. 小程序向java后台发送图片_微信小程序在后台如何将二进制流转换成图片
  7. Win-MASM64汇编语言-PTR运算符
  8. 联想拯救者Y7000 win10+ubuntu18.04双系统 nvidia1050ti驱动安装
  9. idea 右键修复lint格式问题
  10. Go typeof、 Kind、Elem、Name用法
  11. 提取保存Win10锁屏壁纸
  12. 04 带宽管理的队列规定
  13. 帖子浏览定位展开、收起标签js部分思路及代码
  14. Python 猜100以内数字
  15. 围棋计算机运算,围棋冠军:用计算力赢计算机
  16. 3DMARK 06超频后成绩上万
  17. 鸿蒙OS应用开发基础之页面的跳转
  18. cocos2dx 常用的基本功能
  19. lgg8各个版本_如何评价LG G8?
  20. iOS 修改tabBar frame

热门文章

  1. 进阶-第28__深度探秘搜索技术_实战掌握误拼写时的fuzzy模糊搜索技术
  2. [JZOJ5551] 【NOI2019模拟6.24】旅途【最短路】
  3. 基于python代码的3D地图可视化
  4. 【基础】【前端】 HTML Select 框怎么做预选值
  5. 当前 .NET SDK 不支持将 .NET Core 2.2 设置为目标。请将 .NET Core 2.1 或更低版本设置
  6. java计算机毕业设计html5健身房信息管理系统源码+数据库+系统+lw文档
  7. python量化策略—— alpha 三因子策略(1)
  8. 第6周作业1-闰年之循环判断(网络131黄宇倩)
  9. 抓包PC微信小程序失败解决方法
  10. Download a file from Google Drive