设计模式不是一般的难!

第一难:需要你有真正的OO水平,有大量的编码及设计基础。

第二难:难以在工作中真正实践全部23中设计模式,无实践就无法真正理解。很少系统需要用到设计模式,或者只能用到很少的一部分。我们这些软件开发人员,大部分都是在做数据库的CRUD的工作,设计模式难有用武之地。

第三难:学习资料要么太深奥难懂,要么就是太肤浅了。

第四难:你以为你懂了,其实你没懂!设计模式学习过程是迂回前进的。

第五难:找不到高手与你沟通!

超级扫盲 - 什么是设计模式?

什么是设计模式?

设计模式,英文名字叫Design Pattern,这个“Pattern”硬生生地给翻译成“模式”,徒增了很多人的理解难度。

话说回来,我也不知道咋翻译好,反正设计模式这个说法说得多了,也就习惯了。

设计模式就是一些软件设计高手总结后得出的一些设计经验总结,目前还没有习惯设计模式这个说法的朋友就暂时不要去考究这个名字了,大概知道它的意思便可。

有什么设计模式?

设计模式一共有23种,按以下分类:

创建型(5种)

1) 工厂方法(Factory Method)

2) 抽象工厂(Abstract Factory)

3) 单件(Singleton)

4) 生成器(Builder)

5) 原型(Prototype)

结构型(7种)

1) 装饰者(Decorator)

2) 适配器(Adapter)

3) 外观(Facade)

4) 组合(Composite)

5) 代理(Proxy)

6) 桥接(Build)

7) 轻量(Flyweight)

行为型(11种)

1) 策略(Strategy)

2) 观察者(Observer)

3) 命令(Command)

4) 模板方法(Template Method)

5) 迭代器(Iterator)

6) 状态(State)

7) 责任链(Chain)

8) 解释器(Interpreter)

9) 中介者(Mediator)

10) 备忘录(Memo)

11) 访问者(Visitor)

以上分类是按“官方”标准进行划分的,所谓的“官方”就是软件设计届的4位骨灰级人物:Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides,这几位作者常被称为"四人组(Gang of Four,缩写为GoF)",他们的著作就是《Design Patterns: Elements of Reusable Object-Oriented Software》(中文名:《设计模式 可复用面向对象软件的基础》)。

关于设计模式的吐槽

惨不忍睹的软件设计现状与设计模式的理想境界

许多年前,IT行业是被崇拜的行业,程序员更是神圣的职业。但现在早已是程序员泛滥,大量的计算机专业应届生涌入编程的行列,蛇龙混杂,参差不齐。很多只在学校学过一两门编程,所写的代码行数不超过1000行的人,就直奔编程来了!编码功底不过关的程序员比比皆是,更甚者直奔软件设计去了。

国产的大部分软件,无设计可言,90%以上的项目是没有设计文档的,绝大部分的项目代码是没有人愿意去动的,大部分的项目经理做项目都是抱着早做完早解脱的心态,大部分的软件设计师没有感受到软件设计的魅力,没有办法去享受软件设计的乐趣。

设计模式能拯救我们这样的现状吗?设计模式为我们勾画了软件设计的美好境界,让我们很多人趋之若骛,很多人想在实际工作中运用设计模式,当往往是碰一鼻子灰,这有很多原因:

1) 我们的水平还不够,没有能真正理解好设计模式,自然无法用好。

2) 我们绝大部分的系统是数据库增删改查的四轮马车操作,设计模式的用武之地很小。

然而更深层次的原因是:

1) 国内的软件编程及设计的教育实在太差,计算机相关专业知识陈旧落后。

2) 国内软件水平实在落后,绝大部分软件企业是做解决方案、外包等应用级别的开发,精品软件、划时代的软件、改变世界的软件几乎等于零。

3) 国家在软件行业的方针路线有误,重点应该是打造核心技术和培养高级人才,不要去折腾什么外包、CMMI,核心技术和高级人才才是国家核心竞争力。

设计模式不是纸上谈兵

n年前,我就买了GoF大作《Design Patterns: Elements of Reusable Object-Oriented Software》(中文版),不过实在惭愧,当时水平太差,里面的内容大部分是似懂非懂。尽管我已经写了几年代码,但功力依然是不足,经验也不够多,但大师的知识一时难以吃透。再过了几年,我又再次研究设计模式,这次居然基本可以看懂那本书了,感觉特妙!

设计模式绝对不是纸上谈兵的知识,光看书就以为自己懂了,那只是井底之蛙之见,设计模式绝对是从实践中来到实践中去的!如果编码经验很少,也不太可能能理解好设计模式,但凡软件设计能力强的人编码功底都是相当扎实的。如果没有能深刻理解面向对象,也不太可能理解好设计模式。

高手是怎样炼成的?

我不是设计模式的高手,但我希望成为高手,要达成这个目标,还需要多年的努力。

按对设计模式的熟悉程度,我划分了以下几种档次:

1. 不知道:没听说过,或者只知道名字。

2. 能说:能简单说出该模式的用途。

3. 能画:能准确地画出该模式的类图,或者画出实际应用的类图。

4. 能写:能写出实现该模式的实例代码。

5. 会用:能在实际工作中用起来。

6. 活用:很熟练,能在工作中创造性地应用设计模式,可以指导别人应用设计模式工作。

对于我来说,23种模式我大概只能达到第3到第4的层次,如果能达到第6个层次,那简直就是世外高人了!

如何学习设计模式?

说说我的一些学习体会:

1. 要用真正面向对象的语言来编程,如Java、C#、C++,这样才能加速你对面向对象、设计模式的理解。

我最开始用的编程语言是Basic,然后是Visual Basic,结果抽象类、继承这些东西基本上没有能在实际工作中体会过,后来用C#后才算是真正体会到面向对象。

2. 找显浅的设计模式书来学习。

GoF的经典大作好是好,但很难看懂,后来我看了比较显浅的《Head First 设计模式》,终于我让跨进了实质的一步。

3. 在实际工作中多用类图。

类图光会看是远远不够的,要多多实践,通过类图来提高你的OO能力!

4. 多想具体的应用例子,并写出示例代码。

尽管有一些显浅的设计模式书,但里面不少例子没有实际的应用价值,有些书甚至还会用一些实际生活中的例子来说明某某模式,我觉得有点牵强附会。书中的大部分例子,只能帮助你大概理解该模式,更重要的是你必须想到在实际工作中的具体应用,写出具体的代码来。当然要做到这点很难,需要有很多工作经历。

5. 多提问题,敢于挑战传统想法。

学习过程中,一定要多多思考、深入思考,多提问题,你会发现有些问题与你之前的认识是相左的,有些问题是和别人的看法是矛盾的,有时你甚至会去怀疑GoF是不是搞错了,这些都很正常,也是很好的事情。

设计模式的难度及有用程度

以下两个表是我的个人体会,仅供参考。

按理解难度分类

按有用程度分类

请看下一文……

作者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

《火球——UML大战需求分析》作者

www.umlonline.org创办人

转载于:https://blog.51cto.com/fireball1975/1375648

1.1 《硬啃设计模式》 第1章 大话设计模式相关推荐

  1. 0.《硬啃设计模式》- 序、目录、下载方法等

    开篇废话 无奖竞猜: 上联:越看越晕 下联:越晕越看 请问横批是什么?(猜是软件开发业内的某个名词.) 十年前第一次听说它,觉得很神奇,先后投入了N轮的学习时间,每一轮都是越看越晕,越晕就越想看懂它! ...

  2. 『设计模式』HR:不会设计模式,你好意思来面试?(面试必备设计模式)

    23种设计模式+额外常用设计模式汇总 (持续更新) 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一 ...

  3. 大话设计模式——六大原则(SOLID)

    S:单一职责原则(Single responsibility principle) **解释:**它规定一个类应该只有一个发生变化的原因.单一职责原则是最简单的面对对象设计原则,它用于控制类的粒度大小 ...

  4. 【大话设计模式】设计模式系统学习大合集

    转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按 ...

  5. 「大话设计模式 - 解读」0 设计原则

    看到 Datawhale 的推送之后,也刚好借此时间阅读下设计模式,提升下代码能力.本次学习主要针对面向对象语言,在此选用 C++ 进行学习,参考学习资料: Github: sweetalk-desi ...

  6. 「大话设计模式 - 解读」5 大作业

    内容要求 在这边把两次作业合在一起.作业要求实现一个商场结算程序.其中要完成几个功能: 结算模块.针对不同的商品不同的营销策略(不同打折方式)进行结算: 商品状态.商品需要至少包含在售,缺货以及上架中 ...

  7. 「大话设计模式 - 解读」1 策略、修饰、代理模式

    策略模式 在日常中,我们常随着时间的不同对同一件事的处理会发生不同.就好像一件物品,在购物平台上的销售策略会发生变化,时而打折,时而满xx元返xx元.这些都是不同的策略,然后策略是无法穷尽的,他们都有 ...

  8. 《大话设计模式》第29章-OOTV杯超级模式大赛—模式总结(五)

    <大话设计模式>将于11月底由清华大学出版社出版 <大话设计模式>第29章-OOTV杯超级模式大赛-模式总结(一) <大话设计模式>第29章-OOTV杯超级模式大赛 ...

  9. 《大话设计模式》第29章-OOTV杯超级模式大赛—模式总结(三)

    <大话设计模式>将于11月底由清华大学出版社出版 <大话设计模式>第29章-OOTV杯超级模式大赛-模式总结(一) <大话设计模式>第29章-OOTV杯超级模式大赛 ...

最新文章

  1. SSM开发 | 配合Mybatis,通过泛型实现 BaseService ,抽象增改删查方法
  2. 【异常】 ‘ascii‘ codec can‘t decode byte 0xe8 in position 2: ordinal not in range(128)
  3. vue openlayer单击地图事件循环多次执行_VUE生命周期函数面试题
  4. ubuntu 12.04 解压安装jdk
  5. 我犯了一个错误,您能指出吗?(结论)
  6. 查询表空间状态,创建表空间,让表空间的大小自动扩展,删除表空间
  7. SimulatorXcode模拟器如何使用PC键盘进行输入
  8. idea工作台输出的日志详解_详解linux下nohup日志输出过大问题解决方案--分批切割...
  9. Kubernetes入门--搭建Kubernetes集群,并启动容器服务
  10. python如何和qt交互_Python 之Pyqt5操作交互处理,原来这么简单!
  11. Elasticsearch高级查询2:ES 高级查询
  12. java使用RSA加密方式,实现数字签名
  13. 网站底部版权声明、备案编号、许可证信息应该怎么写?
  14. 银行数据仓库体系实践(15)--数据应用之巴塞尔新资本协议
  15. Python程序设计——基本语法
  16. uni-app学习笔记
  17. Uninstalltool-专业卸载工具
  18. 微信小程序:小程序内用户帐号登录规范调整和优化建议
  19. MySQL外键约束(FOREIGN KEY)是什么?
  20. 几款磁力搜索引擎,找资料更方便

热门文章

  1. 揭秘人工智能(系列):深度学习是否过分夸大?
  2. SAP MM 103 + 105 移动类型组合初探
  3. 深度丨霍金的去世让我想起了微软提出的人工智能十大原则
  4. 华人一作统一「视觉-语言」理解与生成:一键生成图像标注,完成视觉问答,Demo可玩...
  5. 价值2950亿美元的「量子霸权」,技术水平到了哪个阶段
  6. 新造车公司背后的「资本大佬」
  7. 走近“颠覆性技术”:量子通信能否取代传统通信?
  8. 在腾讯,我的试用期总结!
  9. 漫话:如何给女朋友解释为什么不能在 MySQL 中使用 UTF-8 编码
  10. 跟风 Python 的人,后来都怎样了?