自从九月份读完《Effective C++》后,实验室的任务就特别多,导师管理得也严格,白天基本上只能待在实验室,晚上回宿舍也没有太多精神看书,因此计算机相关内容的学习就相当缓慢。
通过读《Effective C++》,对C++的底层特性有了更深的了解。当时预计从C++出发,一方向是向下更深地去理解C++的对象模型和语言特性,学会使用STL和Boost,使对这门语言的掌握更上层楼,向上则学习设计模式软件工程相关知识,学会使用C++来建立程序框架进行开发。暑假学了一段时间的Qt,对它的开发框架有了初步的掌握,但没有时间去做深入的案例开发(也怪我太懒,没有恒心去开发工程,本来想开发一个简单的微博工具,但是新浪微博的接口变换太快,时间一长不出成果心情沮丧,给自己找了些借口就一直没做下去,在此该狠狠地批评一下!),不过对软件开发的整体框架有了了解。这次看《设计模式》就是在这个基础上做的一个巩固,目标就是用C++语言来延伸到软件的开发上来。
当时找了好多本关于设计模式的书,看来看去还是这本由“四人帮”写得最经典评价最高,另外很多人说这书的中文版翻译太烂,有错误,语言不通顺,建议买原版。经过多方比较,还是买了这本英文版的书,从九月底开始看,断断续续看到十月中旬也没多少进展。十月底忙着做实验也一直在耽误,一直到了上个星期,才下决心挤时间认真阅读。时间是海绵里的水,用力挤吧,总会有的。
这本书虽是英文,但是并不晦涩,四级水平应该不难理解,句式也很简单,即使不能一下子理解多读几次也能明白。另外,在读书期间可以参照网上大牛们写的读书笔记和博客系列,一些比较困难的问题都有解释,百度一搜应该就有不少。同时读书时电脑上开着字典,基本上没有障碍。
本来没想着记录到网上,但是后来想好记性不如烂笔头,再写上一遍能够温故知新,是学习的过程,因此开始记下读书过程中的总结。
-----------------------------------
序言
1.什么是设计模式:源自建筑学概念,所谓模式就是描述了一个普遍的问题,并提出相关的核心解决方案,遇见类似问题时可以重复使用(当然要有一定的修正)。在软件工程中,具体是指在特定情况下解决一些普遍问题时对象与类之间通信的描述。
在这本书中,一共就软件工程遇见的常见问题提出了23种设计模式,每种模式包括以下内容:模式名称,适用解决的问题,解决方案,以及效用。其目的是提高程序的灵活性,可扩展性和可移植性。
2.23种设计模式的分类:
|
| 用途 | ||
|
| 创建型 | 结构型 | 行为型 |
适用范围 | 用于类 | 工厂模式 | 适配器模式(用于类) | 解释者模式 模板模式 |
用于对象 | 抽象工厂模式 建造者模式 原型模式 单例模式 | 适配器模式(用于对象) 桥接模式 组合者模式 装饰者模式 外观模式 亨元模式 代理模式 | 职责链模式 命令模式 迭代器模式 中介模式 备忘录模式 观察者模式 状态模式 策略者模式 访问者模式 |
3.设计模式解决问题的方法
(1)寻找合适的对象:将问题分解为合适的对象。
(2)决定这些对象的粒度。
(3)确定对象的接口。
(4)确定对象的实现。这里需要区分类的继承和接口的继承的区别,注意“针对接口编程,而非针对实现编程”的原则。
(5)要实现重用的机制。原则:尽量使用对象的组合来代替类的继承。
(6)合理使用“运行时结构”和“编译时结构”。
(7)记住程序永远是在变化中的,要让程序适合“改变”。
一般来讲,软件就适用对象来说可以分为三类:应用程序(要求内部重用,可维护性和扩展性)、工具箱(要求代码重用)和开发框架(要求设计层面上的重用性)
4.如何选择一个设计模式?如何使用设计模式?
个人认为这属于说起来太空泛的内容,至少现在刚入门没有什么体会。不过据网上大牛说,要理解软件设计的那些原则,清楚自己要解决的问题表现在哪些方面,根据不同的结构和需要去设计(空泛吧?都是废话)。我的理解是,多coding,写得多了自然就知道了。
另外,将一个开发框架熟悉并掌握,也是学习设计模式的好方法。很多开发框架都用到了这些设计模式,作者在书中举到的例子里就有九十年代很流行的那些开发框架,虽然有些老旧,但是和现在常用的Java框架、Qt等等都一脉相承,可以作为参考。
看书时我是一边看一边拿笔划,看到UML图就自己照着写一个,示例代码只是看了一下,没有去实现。作者在书中的代码是用C++和SmallTalk来写的,我主要看C++的,后者一般直接跳过。
-----------------------------
在第二章,作者举了一个文档编辑器的例子来对软件开发进行了讲解,我想先学知识再回头看,因此直接跳过。