某个类作了过多的简单委托动做。让客户直接调用受托类。 java
“封装受托对象”有其好处,可是这层封装也是要付出代价:每当客户要使用受托类的新特性时,就必须在服务端添加一个简单委托函数。随着受托类的新特性愈来愈多,服务类彻底变成了一个“中间人”,此时就应该让客户直接调用受托类。 ide
1.创建一个函数,用以得到受托对象。 函数
2.对于每一个委托函数,在服务类中删除该函数,并让须要调用该函数的客户转为调用受托对象。 测试
3.处理每一个委托函数后,编译、测试 spa
咱们将使用以前用过的“人与部门”的例子。在上一项重构(Hide Delegate)结束时,Person将Department隐藏起来,为找出某人的经理,客户代码可能这样写 code
manager = john.getManager();像这样,使用和封装Department都很简单。但若是大量函数都这么作,咱们就不得不在Person之中安置大量委托行为。这就该是移除中间人的时候了。首先在Person中创建一个函数用于得到受托对象:
public class Person { Department department; public Department getDepartment() { return department; } ... }而后逐一处理每一个委托函数。针对每个这样的函数,找出经过Person使用的函数,并对它进行修改,使它首先得到受托对象,而后直接使用后者:
manager = john.getDepartment().getManager();而后咱们就能够删除Person的getManager()函数。若是遗漏了什么,编译器会告诉咱们。