《设计模式:可复用面向对象软件的基础》读书笔记前言
我想这本书是软件设计中一本非常重要的书,我想要认真研究一下它。我决定边看这本书边做些笔记,这样有助于我日后复习。
笔记我希望包含下面三个部分:
要点:书中一些高度概括化的条目,如果回头发现不能理解,则我应该查阅书中更具体的解释。
名言:书中我认为一些很有道理的话
感想:对我印象颇深的内容
目录分析
概括来讲,这本书先讲了“设计模式”的基本概念,研究了一个设计案例,然后重点讲解了23个设计模式。
目录如下:
要点
设计模式怎样解决设计问题?
- 寻找合适的对象
- 决定对象的粒度
- 指定对象接口
- 描述对象的实现
- 运用复用机制
- 关联运行时和编译时的结构
- 设计应支持变化
面向对象设计的原则
- 针对接口编程,而不是针对实现编程
- 优先使用对象组合,而不是类继承
“聚合”和“相识”
- 聚合意味着一个对象拥有着另一个对象,或对另一个对象负责
- 相识意味着一个对象仅仅知道另一个对象。
一些导致重新设计的一般原因
- 通过显式地指定了一个类来创建对象
- 对特殊操作的依赖
- 对硬件和软件平台的依赖
- 对对象表示或实现的依赖
- 算法依赖
- 紧耦合
- 通过生成子类来扩充功能
- 不能方便地对类进行修改
“模式”和“框架”的区别
- 设计模式比框架更抽象
- 设计模式是比框架更小的体系结构元素
- 框架比设计模式更加特例化
怎样选择设计模式
- 考虑设计模式是怎样解决设计问题的
- 浏览模式的意图部分
- 研究模式怎样互相关联
- 研究目的相似的模式
- 检查重新设计的原因
- 考虑你的设计中哪些是可变的
怎样使用设计模式(仅针对新手)
- 大致浏览一遍模式
- 回头研究结构部分、参与者部分和协作部分
- 看代码示例部分
- 选择模式参与者的名字,使它们在上下文中有意义
- 定义类
- 定义模式中专用于应用的操作名称
- 实现执行模式中责任和协作的操作
名言
本书中的设计模式是对用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。
对某一种模式一种语言比另一种语言表述起来更容易一些
面向对象设计最困难的部分是将系统分解成对象集合。因为要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、演化、复用等等,他们都影响着系统的分解,并且这些因素通常还是互相冲突的。
不将变量声明为某个特定的具体类的实例对象,而是让它遵从抽象类所定义的接口。这是本书设计模式的一个常见主题。
经验表明:设计者往往过度使用了继承这种复用技术
子类方法会导致类爆炸,因为即使对于一个简单的扩充,你也不得不引入许多新的子类
感想
尽管问题差别很大,但是解决是有通用的解决方案的。
虽然许多对象来源于现实世界的分析模型,但是也有很多对象现实中并不存在。
继承和组合各有优劣,应根据具体情况来选择。不过大部分情况下,继承是被滥用的。
聚合和相识各有优劣。我想,在C++中,聚合意味着一个对象有另一个类的成员,而相识则意味着有另一个类的指针。二者如何选择应该视具体情况思考。