第一章 引言
1、什么是设计模式?
设计模式是人们用来解决一些相似的问题和解决这类问题的核心方案。设计模式是用来实现设计复用的。
2、设计模式的四要素
名称:描述模式的问题、解决方案和效果。名称有助于人们之间交流设计思想和设计结果。
问题:描述了何时使用模式。它描述了设计问题以及问题存在的前因后果。
解决方案:描述了设计的组成部分,以及它们之间的相互关系、各自的职责和协作方式。
效果:描述了模式应用的效果及使用模式应权衡的问题。
3、本书如何描述一种设计模式?
从以下方面来描述:模式名称和分类、意图、别名、动机、适用性、结构、参与者、协作、效果、实现、代码示例、已知应用、相关模式。
4、设计模式怎么样解决问题
1)寻找合适的对象。对象包括数据和对数据的操作。设计模式帮你确定并不明显的抽象和描述这些抽象。
2)决定对象的粒度。
3)指定对象接口。接口是对象所提供的所有操作的集合。
4)描述对象的实现。对接口编程,而不是对实现编程。
5)运用复用机制。优先使用对象组合,而不是类继承。
6)关联运行时刻和编译时刻的结构。
7)设计应支持变化。一般会导致重新设计的因素:通过显示地指定一个类来创建对象、对特殊环境的依赖、对硬件和软件平台的依赖、对对象表示或实现的依赖、算法依赖、紧耦合、通过生成子类来扩充功能、不能方便地对类进行修改。
5、怎样选择设计模式
这里给出几个不同的方法:
1)考虑设计模式是怎样解决设计问题的。
2)浏览模式的意图部分。
3)研究模式怎样互相关联。
4)研究目的相似的模式。
5)检查重新设计的原因。
6)考虑你的设计中哪些是可变的。
第二章 实例研究
本章主要结合一个文本编辑器Lexi实例,来讲了几种设计模式的运用,已经为何选用这些设计模式。
如果没有接触过设计模式,咋一看这一章很难理解。可以先阅读后面的章节,然后回头看这一章,也许会有新的认识。
第三章 创建型模式
1、这些模式中的两个主旋律:它们都将关于该系统使用哪些具体的类的信息封装起来;它们隐藏了这些类的实例是如何被创建和放在一起的。
2、abstract factory 抽象工厂
2.1 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂类创建接口,子类实现接口。
2.2 在以下情况下可以使用abstract factory模式:
1)一个系统独立于它的产品的创建、组合和表示时。
2)一个系统要由多个产品系列中的一个来配置时。
3)当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4)当你提供一个产品类库,而只想显示它们的接口而不是实现时。
3、builder 生成器
3.1 意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
3.2 在以下情况使用该模式:
1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2)当构造过程必须允许被构造的对象有不同的表示时。
3.3 与abstract factory的区别:build模式着重于一步步构造一个复杂对象,在最后一部返回产品;abstract factory着重于多个系列的产品对象(简单的或是复杂的),产品是立即返回的。
4、factory method 工厂方法
4.1 意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实现延迟到其他子类。
4.2 在以下情况下可以使用该模式:
1)当一个类不知道它所必须创建的对象的类的时候。
2)当一个类希望由它的子类来指定它所创建的对象的时候。
3)当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
5、prototype 原型
5.1 意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
5.2 当一个系统应该独立于它的产品创建、构成和表示时,要使用该模式,以及:
1)当要实例化的类是在运行时刻指定时,例如,通过动态装载,或者
2)为了避免创建一个与产品类层次平行的工厂类层次时;或者
3)当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
6、singleton 单件
6.1 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
6.2 在下面的情况下可以使用该模式:
1)当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2)当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。