代理这个名词,其实我一直没有听过,也许有用过但是不知道而已。。。
Java中并没有提供对它的直接支持,这个也挺好理解的看个书上的例子。
public class SpaceShipControls {
void up(int i){}
void down(int i){}
void left(int i){}
void right(int i){}
void forward(int i){}
void back(int i){}
void turboBoost(){}
}
public class SpaceShipDelegation {
private String name;
private SpaceShipControls controls = new SpaceShipControls();//
public SpaceShipDelegation(String name)
{
this.name = name;
}
//Delegated methods:
public void up(int i){
controls.up(i);
}
public void down(int i){
controls.down(i);
}
public void left(int i){
controls.left(i);
}
public void right(int i){
controls.right(i);
}
public void forward(int i){
controls.forward(i);
}
public void back(int i){
controls.back(i);
}
public void turboBoost(){
controls.turboBoost();
}
}
原本可以直接写一个类SpaceShip继承SpaceShipControls,然后调用里面的方法,但是这样的话SpaceShipControls中所有的方法都在SpaceShip中暴露出来。
上面是自己创建了一个SpaceShipControls对象,然后再依次调用对应的方法。有可能会觉得这样有点多余,但是这样做的话我们有更多的控制力,因为我们可以只提供在成员对象中的方法的某个子集,不会像继承一样把所有的方法都暴露出来。
注:Java语言是不支持代理的