最近看完了《HeadFirst设计模式》,GOF的《设计模式——可复用面向对象软件的基础》的创建型模式也读完了,经历了从一无所知到茅塞顿开再到充满迷惑的过程。

  不得不说《HeadFirst设计模式》是一本非常好的入门书,每一章都是先提出问题,然后讨论、分析,引导出相应的设计模式,再一步一步的实现,幽默的语言和有趣的插图,让人轻松愉快的学习了一个模式。之前我对学习设计模式是有很大的畏难情绪的,上网一搜一看,妈个鸡,动不动就什么GOF什么23个设计模式,然后找个工厂方法或者抽象工厂的例子一看头都炸了,直接就放弃了。但是,看来这本书的第一章学习了策略模式之后,感觉设计模式也就那那么回事呀,然后继续往后看,除了少数几个模式,简直就是哪里不会学哪里,so easy……那少数几个其实也就是观察者,抽象工厂和策略模式,有可能是我智力太低理解不了,感觉真的抽象。但是我读了GOF的书又看来网上一些例子后再回过来看,这本书里抽象工厂的表述似乎太复杂了。一般的例子里工厂就一两个方法,具体产品也是就一两个,而这本书里工厂有6个方法,8个具体产品(两个族,每个族4个),当时我就懵逼了……但是这并不影响,因为这本书只是起个引导作用,虽然厚达600页但是并没有完整的介绍所有的GOF的23个设计模式,于是我又不得不从裤裆里掏出了绝世武功秘籍《设计模式——可复用面向对象软件的基础》……

  秘籍就是秘籍,连名字都这么霸气(长),而且既然是绝世武功定然不是一般路人能够轻易领悟的。前三章(其实第二章没看)看完,除了类图很清晰以外,其他都很难懂啊(╯‵□′)╯︵┻━┻!C++和Smalltalk是什么鬼?(其实C++还是看的懂一点)不过,这书应该是像参考手册一样,变用边看,常看常新的吧……

  我觉得要记住一种设计模式最好就是记住它的UML类图,因为设计模式就是几个类和他们之间的关系,有了图,就很容易用代码实现了。但是这只是一个空架子而已,是没有灵魂的躯壳。为什么要使用设计模式,各个模式的优缺点和适用性是什么?这些应该更重要一些。 这在GOF的书里都有详细描述,但是我大多看不懂……后来在我在看网上的例子的时候注意到了面向对象设计原则(其实《HeadFirst设计模式》里也有介绍,不过很介绍得很简单),然后才发现还有GRASP这个东西(在这里看到的)。结合GRASP和设计原则大概就能回答前面的问题了,而且还能帮助我更好的理解GOF的书。我想设计模式应该是遵循设计原则而产生的自然的结果,而不是我们去迎合设计模式。那篇博客的作者提到了两本书——《UML和模式应用》、《敏捷软件开发—原则、模式与实践》应该看看……(话说有太多书没看了啊,大学的时间都浪费在打游戏上了……)

  话说我到底为什么要学习设计模式呢?我想大概是该给自己定个目标了吧,一个菜鸟也有要当架构师的梦。如果有一天老板过来说:“小伙子,你来做架构吧!公司已经开会决定了!”的时候,我也要念两句诗……然后就是升职加薪,出任CTO,和董事长谈笑风生……咳咳,暴力……啊不,白日做梦不可取……快点滚去写代码!

  

最新文章

  1. polya/burnside 学习
  2. 【iCore3 双核心板】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
  3. SQL Server 索引中include的魅力(具有包含性列的索引)
  4. 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)
  5. C#中进行单元测试
  6. WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1
  7. [支付]银联支付(对jdk有要求,最好直接使用jdk7)
  8. 让XP系统支持GPT硬盘
  9. [ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件
  10. 微信内分享第三方H5链接无法使用内置浏览器打开的解决方案
  11. 从零开始学安全(二十七)●利用Nmap对防火墙,IDS,IPS 进行欺骗
  12. ava EE 7 - Injection into Runnable/Callable object ejb entityManager Concurrency ManagedExecutorService 异步调用如何获取context
  13. Oracle 11g服务详细介绍及哪些服务是必须开启的
  14. springmvc访问项目默认先访问后台再返回首页
  15. T-SQL 无参数的存储过程的创建和执行
  16. C#中巧用#if DEBUG 进行调试
  17. JWT+Log4net配置与使用
  18. npm 删除node_modules
  19. Object C学习笔记9-字符串NSMutableString
  20. php 传递赋值和地址赋值 &

热门文章

  1. rightTeam SCRUM第一个冲刺周期
  2. springMVC注解@initbinder日期类型的属性自动转换
  3. 解决PL/SQL查询结果乱码的问题
  4. isEmpty与null、""的区别
  5. A -- HDU 4585 Shaolin
  6. 利用PBfunc在Powerbuilder中使用https获取微信的AccessToken
  7. Tomcat/JSP中文编码配置
  8. .NET WinForm画树叶小程序
  9. jQuery.makeArray() 函数详解
  10. echarts 地图图