7.5 hide delegate (隐藏委托关系)

来源:互联网 发布:300271华宇软件 编辑:程序博客网 时间:2024/05/17 05:53

客户通过一个委托类来调用另一个对象。

在服务类上建立客户所需的所有函数,用以隐藏委托关系。

动机:

封装意味每个对象都应该尽可能少了解系统的其他部分。如此一来,一旦发生变化,需要了解这一变化的对象就会比较少。

如果某个客户先通过服务对象的字段得到另一个对象,然后调用后者的函数,那么客户就必须知晓这一层委托关系。万一委托关系发生变化,客户也得相应变化。可以在服务对象上放置一个简单的委托函数,将委托关系隐藏起来,从而去除这种依赖。

做法:

对于每一个委托关系中的函数,在服务对象端建立一个简单的委托函数。

调整客户,令它只调用服务对象提供的函数。

=》如果使用者和服务者不在同一个包,考虑修改委托函数的访问权限,让客户得以在包之外调用它。


旧代码

class Person{Department _department;public Department getDepartment(){    return _department;}public void setDepartment(Department arg){    _department = arg;}}class Department{private String _chargeCode;private Person _manager;public Department(Person manager){    _manager = manager;}public Person getManager(){    return _manager;}}


新代码

public Person getManager(){    return _department.getManager();}