本文用于记录本人阅读完HeadFirst设计模式一书后对此书的总结,总结系个人理解并简化提炼,方便使用设计模式时速查,如有错漏,请积极指出,本人将虚心接受并及时改正。
1. 策略模式
1.1 使用前提
多个同类型的不同对象,具有不同表现的同类行为。
1.2 使用方法
- 建立父类,将对象中相同的方法整合到父类实现。
- 不同的同类型行为建立对应的接口。
- 为不同行为实现相应类型的行为接口。
- 父类持有行为接口对象,子类初始化具体的行为对象。
1.3 解决的问题
具有相同属性,但行为(功能)不同的同类型事物。
1.4 案例类图
2. 观察者模式
2.1 使用前提
某个对象的属性会对其他对象产生影响,且该属性会产生变化。
2.2 使用方法
- 建立被观察者接口(注册与移除观察者,通知观察者变化)与观察者接口(观察到变化时触发行为)。
- 影响其他对象的对象实现被观察者接口,属性变化时通知观察者。
- 被影响的对象实现观察者接口,实现观察到变化时触发的行为。
2.3 解决的问题
当一个对象属性状态改变时,所有依赖他的对象都会收到通知并触发行为。
2.4 案例类图
3. 装饰者模式
3.1 使用前提
已有类具备基本的属性及功能,但新需求需要在原有类的基础上增加属性及功能,新需求不想影响原有类。
3.2 使用方式
- 为原有类A提取父类B,提取出关键方法;
- 新建类C继承父类B,实现提取出的关键方法,增加新属性及功能完成新需求;
- 新建类D继承父类C,持有一个父类B对象,构造方法需要父类B对象作为参数;
- 创建类A的实例并用于创建类D的实例,完成新需求,类D是类A的装饰者。
3.3 解决的问题
在不修改原有类的代码的情况下,为原有类赋予新的属性及功能,达到不影响原有系统的情况下完成新的需求。
3.4 案例类图
4. 工厂模式
4.1 使用前提
有多个具有不同属性或构造方法但有相似功能的同类产物,需根据条件创建不同的对象。