范例(Examples)
本例從兩個classes開始,代表[人]的Person和代表[部門]的Department:
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;
}
...
如果客戶希望知道某人的經理是誰,他必須先取得Department對象:
manager = john.getDepartment().getManager();
這樣的編碼就是對客戶揭露了Department工作原理,于是客戶知道:Department用以追蹤[經理]這條信息。如果對客戶隱藏Department,可以減少耦合(coupling)。為了這一目的,我在Person中建立一個簡單的委托函數:
public Person getManager() {
return _department.getManager();
}
現在,我得修改Person的所有客戶,讓它們改用新函數:
manager = john.getManager();
只要完成了對Department所有函數的委托關系,并相應修改了 Person的所有客戶,我就可以移除Person中的訪問函數個體Department()了。