java的代理(编程思想)
2017-07-26 07:57
218 查看
代理
第三种关系被称为代理,java并没有提供对它的直接支持。这是继承和组合之间的中庸之道,因为我们将一个对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。
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() {}
}
/**
* 使用继承得到太空船
* 然而SpaceShip并非真正的SpaceShipControls类型,即便你可以告诉SpaceShip向前运动(forward())。更准确的讲,
* SpaceShip包含SpaceShipControls,与此同时,SpaceShipControls的所有方法在SpaceShip中暴露出来了
*/
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);
}
}
使用代理
/**
* 代理解决了上面的问题
*/
class SpaceShipDelegation {
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name) {
this.name = name;
}
//Delegate methods
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 void up(int velocity) {
controls.up(velocity);
}
public static void main(String[] args) {
SpaceShipDelegation protector = new SpaceShipDelegation("NSEA Protector");
protector.forward(100);
}
}
使用代理时可以拥有更多的控制力,因为我们可以选择只提供在成员对象中的方法的某个子集
有没有发现代理和装饰者模式很像,区别应该是装饰着硬性要求提供所有基方法的访问接口。
第三种关系被称为代理,java并没有提供对它的直接支持。这是继承和组合之间的中庸之道,因为我们将一个对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。
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() {}
}
/**
* 使用继承得到太空船
* 然而SpaceShip并非真正的SpaceShipControls类型,即便你可以告诉SpaceShip向前运动(forward())。更准确的讲,
* SpaceShip包含SpaceShipControls,与此同时,SpaceShipControls的所有方法在SpaceShip中暴露出来了
*/
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);
}
}
使用代理
/**
* 代理解决了上面的问题
*/
class SpaceShipDelegation {
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name) {
this.name = name;
}
//Delegate methods
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 void up(int velocity) {
controls.up(velocity);
}
public static void main(String[] args) {
SpaceShipDelegation protector = new SpaceShipDelegation("NSEA Protector");
protector.forward(100);
}
}
使用代理时可以拥有更多的控制力,因为我们可以选择只提供在成员对象中的方法的某个子集
有没有发现代理和装饰者模式很像,区别应该是装饰着硬性要求提供所有基方法的访问接口。
相关文章推荐
- 十、java编程思想中的动态代理实现
- 【JavaWeb-14】代理Proxy、动态代理、AOP编程思想、注解、元注解、类加载器
- Java 编程思想(四)动态代理
- JAVA中的动态代理和AOP编程思想
- java编程思想 学习笔记 equals 与==
- Java编程思想之多线程
- java编程思想笔记--内部类部分二
- java编程思想笔记--内部类部分四
- java编程思想阅读笔记(六)异常处理
- 实例讲解Java设计模式编程中如何运用代理模式
- Java编程思想13.1-不可变的String
- JAVA编程思想学习总结:第八章——多态
- 50.java编程思想——创建窗口和程序片 布局控制
- Java编程思想之静态技术
- 10.JAVA编程思想——对象容纳
- Java 编程思想(第四版)学习笔记(7)复用类
- java编程思想学习_第20章_注解
- Java编程思想-接口总结
- Java编程思想:第9章 接口
- JAVA编程思想学习笔记(二)