| 信号 | 继承只图代码复用、部分父类方法不适用 |
|---|---|
| 做法 | 持有父类实例 + 定向转发 |
| 收益 | 暴露面收窄,替换实现更自由 |
Java 示例
Java 示例
// 之前
class Stack extends Vector { ... }
// 之后
class Stack {
private final Deque<Object> elements = new ArrayDeque<>();
void push(Object o) { elements.push(o); }
}子类关系只为复用父类实现而建立时,改为持有父类实例并转发需要的能力:类型语义不再被伪造,继承带来的多余接口消失;组合优先的具体应用。
| 信号 | 继承只图代码复用、部分父类方法不适用 |
|---|---|
| 做法 | 持有父类实例 + 定向转发 |
| 收益 | 暴露面收窄,替换实现更自由 |
// 之前
class Stack extends Vector { ... }
// 之后
class Stack {
private final Deque<Object> elements = new ArrayDeque<>();
void push(Object o) { elements.push(o); }
}