1. 对象增强的手段
2. 继承
2.1 特点
class 果汁类{ }
class 苹果汁类 extends 果汁类 { }
class 葡萄汁类 extends 果汁类 { }
class 柠檬汁类 extends 果汁类 { }
class 苹果柠檬类 extends 柠檬类 { }
class 葡萄柠檬类 extends 柠檬类 { }
// 增强内容使固定的: 苹果汁类只能增强苹果汁.
// 被增强的对象也是固定的: 增强的只能是果汁. 不能增强酒精类.
3. 装饰者模式
3.1 特点
// 葡萄柠檬苹果汁类
果汁 A = new 苹果();
果汁 B = new 柠檬(A); // 对 A 装饰, 就是在苹果汁中加入柠檬
果汁 C = new 葡萄(B); // 对 B 装饰, 就是在苹果柠檬汁中加入葡萄
// 增强内容是固定的: 苹果只能增加苹果味, 葡萄只能增加葡萄味.
// 被增强的对象是任意的: 苹果可以增强酒精类.
3.2 使用场景
- 不知道被增强对象的具体类型时,可以使用!!
- 是你还有你, 一切拜托你!!
// dbcp 连接池的装饰者模式
// 装饰的是 MySQL 驱动的 Connection 对象
class MyConnection implements Connection{ // 是你
// 还有你
private Connection con; // 底层对象, 被增强对象
// 构造函数, 通过构造函数传递底层对象
public MyConnection (Connection con){
this.con = con;
}
// 一切拜托你, 大部分方法仍然直接调用被增强对象的方法
public Statement createStatement(){
return con.createStatement();
}
// 被增强部分
public void close(){
把当前连接归还给池.
}
}