简化函数调用
以委托取代子类(Replace Subclass with Delegate)
| title | content |
|---|---|
| 场景 | 继承关系遇到问题时运用以委托取代子类是常见的情况 |
| 意义 | 与继承关系相比,使用委托关系时接口更清晰、耦合更少。 |
| 定义 | |
| 做法 | 创建一个空的委托类,这个类的构造函数应该接受所有子类特有的数据项,并且经常以参数的形式接受一个指回超类的引用。 |
| 注意 |
以委托取代超类(Replace Superclass with Delegate)
Tip
除了”子类用得上超类的所有函数”之外,合理的继承关系还有一个重要特征:子类的所有实例都应该是超类的实例
通过超类的接口来使用子类的实例应该完全不出问题
| title | content |
|---|---|
| 场景 | |
| 意义 | |
| 定义 | |
| 做法 | 首先(尽量)使用继承,如果发现继承有问题,再使用以委托取代超类。 |
| 注意 |
隐藏"委托关系"(Hide Delegate)
| title | content |
|---|---|
| 场景 | 客户通过一个委托来调用另一个对象。 |
| 意义 | |
| 定义 | 在服务类上建立客户所需的所有函数,用以隐藏委托关系。 |
| 做法 | |
| 注意 |
移除中间人(Remove Middle Man)
| title | content |
|---|---|
| 场景 | 某个类做了过多的简单委托动作。 |
| 意义 | |
| 定义 | 让客户直接调用受托类。 |
| 做法 | |
| 注意 |
