java 代理 agency

时间:2023-03-09 08:38:22
java 代理 agency

java并没有对其提供直接的支持,这是继承和组合的中庸之道,因为我们将一个成员对象置于所要构造的类中(组合),但与此同时我们在新类中暴露了该成员的所有方法(就像继承),使用代理时可以拥有更多的控制力,因为我们可以选择提供在成员对象中的方法的某个子集;

package object;

 class SpaceShipControls{
void up(int velocity){}
void down(int velocity){}
void left(int velocity){}
void right(int velocity){}
void forward(int velocity){}
void back(int velocity){}
void turboBoost(){}
}
/*//继承 extends
public class SpaceShip extends SpaceShipControls{
private String name;
public SpaceShip(String name) {this.name = name ;}
public String toString(){return name;}
public static void main(String[] args)
{
SpaceShip protector = new SpaceShip("NSEA Protector");
protector.forward(100);
}
}*/
//代理 delegation
public class SpaceShipDelegation{
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name)
{
this.name = name;
}
//Delegated methods
public void back(int velocity){ //使用代理时可以拥有更多的控制力,因为我们可以选择提供在成员对象中的方法的某个子集;
controls.back(velocity); //我们可以只提供back这一个方法
}
public void down(int velocity)
{
controls.down(velocity);
}
public void forward(int velocity)
{
controls.forward(velocity);
}
public void left(int velocity)
{
controls.left(velocity);
}
public void right(int velocity)
{
controls.right(velocity);
}
public void turboBoost()
{
controls.turboBoost();
}
public void up (int velocity)
{
controls.up(velocity);
}
public static void main(String[] args)
{
SpaceShipDelegation protector =
new SpaceShipDelegation("NSEA Protector");
protector.forward(100);
}
}///:~