最近在学习面向对象设计模式,GOF的23种设计模式大概看了一遍,简单总结一下,设计模式主要分为三种模式,分别是创建模式,结构模式,行为模式。

  回过头想一下具体有哪些模式,在什么情况下用什么设计模式,好像还是一头雾水,但是我有几点我却印象深刻,下面就来说说我的感受。

  什么是设计模式,我认为设计模式就是前人在程序设计过程中总结出来的经验,他不是凭空创造出来的。

  为什么要用设计模式呢?

  设计模式的出现就是为了解决软件的变化,因为世界上没有不变的软件,如果有那我想设计模式也就不存在了。刚才说设计模式是应对软件的变化,软件的变化给程序员带来的最大的痛苦是什么呢?我想是软件修改某一处会牵一发而动全身,也就是软件的耦合度过高,设计模式的任务就是降低软件模块之间的耦合度,尽量把模块之间的耦合降到最低。

  那么如何降低耦合呢?

  我认为关键就是抽象出比较稳定或不变化的部分,将变化比较频繁的部分提取出来进行封装,也就是常说的封装变化点,这是始终贯彻与23中设计模式的始终,我觉得也是设计模式的核心。

  掌握了这个核心那么至于使用什么设计模式并不重要了,重要的是如何降低耦合以应对软件的变化。

  我不喜欢一上来就考虑用什么设计模式,我倒是喜欢现来实现功能,然后用重构的方法来对程序进行重构,以降低程序之间的耦合,至于重构成什么样子,是否符合哪一种设计模式我并不关心,我所关心的是它能否很好的应对软件的变化。

  这让我突然想起了《倚天屠龙记》中张三丰交张无忌太极拳的情节,张三丰先是刷了一套他自创的太极拳,张无忌由于天资聪慧看一遍就记下了所有的招式,可是张无忌在用太极拳和那个高手(忘了叫什么了)过招时,并没有发挥出太极拳的威力,于是张三丰就让张无忌忘掉所有的招式(具体忘掉招数的过程很是搞笑),不要拘泥一招一式,见招拆招,最终张无忌战胜了那个高手,这个情节告诉我们,太极拳其实并不是注重招式的,它的精髓就是一种思想,是以静制动,四两拨千斤的道理。

  我想设计模式也类似于太极拳,它是一种思想,一种应对变化的解决思想,他更是一门艺术,更是一种境界,是一种以无招胜有招的境界。

  以上就是我对设计模式的一些肤浅的理解,望批评指正!

转载于:https://www.cnblogs.com/bjs007/archive/2009/11/09/1598898.html

无招胜有招——面向对象设计模式随笔,相关推荐

  1. 【数据湖存储】数据湖的终极奥秘,无招胜有招

    作为海量数据存储与分析的重要承载方式的数据湖,从2011年概念诞生至今,已经发展了9个年头.而数据湖是什么?又能为数字化经济带来什么?<阿里云数据湖存储解决方案蓝皮书>将为您揭开数据湖的终 ...

  2. "无招胜有招"nbsp;史上最全的互…

    课前秀:三个段子 第一个段子:一个毫无餐饮行业经验的人开了一家餐馆,仅两个月时间,就实现了所在商场餐厅坪效第一名;VC投资6000万,估值4亿元人民币,这家餐厅是雕爷牛腩. 只有12道菜,花了500万 ...

  3. Dirty Approach之无招胜有招

    每个网站,几乎都有"新闻"的模块.在中国独有的ICP--Internet Copy and Past--模式下,多数站点也靠"转贴"手段汇集新闻信息.如果说新浪 ...

  4. 设计模式无招胜有招之设计目的

    为什么大家都说计算机是青春饭呢?这是因为大部分计算式知识是个纯粹的对错的知识.比如你学习C++编程,写个表达式,编译器能过就是对的,不能过就是错的.而这个对错的门槛是非常低的.任何人只要学过几天都会的 ...

  5. 无招胜有招之spring _高频面试题

    1.使用 Spring 框架的好处是什么? 1. 轻量:Spring 是轻量的,基本的版本大约 2MB. 2. 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查 ...

  6. 最有用的期货技术 — 无招胜有招

    什么样的期货策略可持续? 期货市场里不缺交易明星,只缺交易寿星.高超的期货交易技术一直是期货交易者们乐于追逐的梦想.很多人在技术学习上花费了上万学费,在技术实战研究上交的学费更是无法估量.期货市场里股 ...

  7. 要锤炼出营销魔法,口碑营销“无招胜有招”

    药剂师们从不指望偶然配成长生不死药,化学家们不会空耗时日炼铅成金,美国宇航局的科学家们也不会徒劳地修补时间机器. 可是,宝洁公司倒是有一帮人耗费四年时光,要锤炼出营销魔法∶自然而然的口碑,也就是大家告 ...

  8. 无招胜有招之Java进阶JVM(五)垃圾回收

    垃圾检测.回收算法 垃圾收集器一般必须完成两件事:检测出垃圾:回收垃圾.怎么检测出垃圾?一般有以下几种方法: 引用计数法:给一个对象添加引用计数器,每当有个地方引用它,计数器就加1:引用失效就减1. ...

  9. 无招胜有招之语言基础

    java的面向对象 面向对象是指用对象来模拟现实实际的事物,用对象之间的关系描述事物之间的联系.面向对象的特点主要可以概括为封装性,继承性和多态性. java语言的三大特征 封装.继承.多态, 封装是 ...

最新文章

  1. Charles 某音最新版本抓包环境搭建
  2. 教你用Python提取Chrome浏览器保存的密码
  3. antd Datepicker组件报错 ——date.clone is not a function或者date1.isAfter is not a function
  4. 如何在mac上编写java程序_在mac系统上安装Eclipse,编写java程序
  5. React组件-事件、状态和生命周期
  6. 【codevs4632】【BZOJ4326】运输计划,链剖+二分+差分
  7. qt widget设置边框_Qt开源作品16-通用无边框拖动拉伸
  8. Linux驱动段错误,linux驱动调试--段错误之oops信息分析
  9. yii2 mysql 队列_yii2.0 中的队列
  10. Linux V4L2 框架分析
  11. 公共DNS递归服务器(转发)
  12. 1553B为什么要加耦合器?
  13. Java学习(8) —— 异常处理
  14. 所谓数据结构,对python来说不过如此
  15. html5手机 一键开发,Html5变革下的H5和手机app开发工具
  16. Hive有分区文件到时select不到数据问题-----修复分区命令 msck repair table xxxxx
  17. 小米路由器3无线网连接到服务器,192.168.31.1小米路由器手机登录设置方法
  18. Ubuntu 有望成为最jia Linux 游戏桌面
  19. 上海亚商投顾:沪指窄幅震荡 “中字头”概念股又暴涨
  20. 什么是human synapsin promoter?

热门文章

  1. Pixelmator for Mac如何使用抠..图的功能
  2. java三色球问题_C语言三色球问题代码解析
  3. Freemarker - 根据模板动态生成word文档
  4. eclipse:解决 The word is not correctly spelled问题
  5. Mac解压缩rar文件
  6. zookeeper之watcher
  7. C#从文件读取 Stream
  8. 飞行控制计算机英语怎么说,“飞行模式”英语怎么说
  9. 无货源开店已确认违法
  10. 华为鸿蒙os操作系统有pc版,华为开源操作系统 鸿蒙OS 升级版曝光,打通PC等一大批硬件...