你懂Java代理吗?
1.面向对象
面向对象的语言中,所有任务都是通过对象完成的。在Java中,对象指的就是类。Java类通过方法对外提供服务,也就是我们所说的api。
2.Java 方法
java方法的构成元素从逻辑上分为两部分——形式和功能。形式可以简单的理解为一个方法长什么样子,再具体一点就是方法名,和参数列表。而功能指的是这个方法的实现方式,也就是方法中的代码。
3.继承和组合
继承和组合都是为了代码复用,但继承针对的是形式的复用,而组合针对的是功能的复用。
4.继承和组合的特点
继承的特点:与基类的形式一致,对子类的使用与父类一致,但重写方法的访问权限不能比父类严格。
组合的特点:对外提供子对象(组合对象)的功能,但是形式(方法名和形参列表)和子对象的不一致。
4.代理
组合和继承的中庸之道。实现方式从形式和功能两方面来讲。
public 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() {}
}
public class SpaceShipDelegation {
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name) {
this.name = name;
}
public void up(int velocity) {
controls.up(velocity);
}
public void back(int velocity) {
controls.back(velocity);
}
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 static void main(String[] args) {
SpaceShipDelegation protector =
new SpaceShipDelegation("NSEA protector");
protector.forward(100);
}
}
上面代码中,SpaceShipDelegation复用了SpaceShipControls中的代码,但是是通过代理的方式。SpaceShipDelegation对外提供了和SpaceShipControls中方法相同的形式,但是拥有包括访问权限在内的更灵活的控制力。而功能直接使用了SpaceShipControls中的功能。这就是代理的中庸之道。