隐藏"委托关系"(HideDelegate),很多人都会被"委托"二字欺骗,认为这是关于隐藏委托的一种重构手法。其实不是的,隐藏"委托关系"(HideDelegate)是减少对象信息的公开。特别是在对类进行封装时,使用的一种重构手法。
我们来看这样的一个例子,有两个类,一个代表着“人”的PerSon和代表着"部门"的Department。
[AppleScript] 纯文本查看 复制代码 class Person
{
private Department _department;
public Department Department { get; set; }
}
[C#] 纯文本查看 复制代码
class Department
{
private string _chargeCode;
private Person _managet;
public Department(Person manager)
{
_managet = manager;
}
public Person getManager()
{
return _managet;
}
}
如果客户要知道某人的经理是谁,他就必须要先取得Department对象;这样就客户就会知道Department类包含一项“追踪经理”这条信息,但其实我们是没必要让客户知道Department类具有这样的功能。哪么我们要怎样做才能对客户隐藏Department呢?
客户要知道某人的经理是谁,直接问当事人是最快,同时也不会知道Department类的存在,所以我们在person类中加入getModerager()委托函数。
[C#] 纯文本查看 复制代码
class Person
{
private Department _department;
public Department Department { get; set; }
public Person getModerager()
{
return _department.getManager();
}
}
这样我们不就可以对客户隐藏Department类咯,从而也减少了耦合度。
参考文献
重构——改善既有代码的设计 【美】Martin Fowler 著
熊节 译
|