代理
什么是代理
什么时候使用代理
改变我们之前的逻辑,执行方法之前做的什么事情,执行方法之后做了什么事情
方法增强
继承
子类继承父类,将父类的方法进行复写,从而进行增强
使用前提:
必须有父类,且存在继承关系
装饰者设计模式
此设计模式专门用于增强方法
使用前提:
必须有接口
缺点:
需要将接口的所有方法都实现
动态代理:
在运动时动态的创建代理类,完成增强操作,与装饰者相似
使用前提:
必须有接口:
难点:
需要反射技术
静态代理(装饰者模式)
设计模式
专门为解决某一类问题,而编写的固定格式的代码
装饰者固定结构
接口A,已知实现类C,需要装饰者创建代理类B
- 创建B类实现接口A
- 提供B类的构造方法,参数类型为A,用于接收A接口的其他实现类(C)
- 给类B添加类型为A成员变量,用于存放A接口的其他实现类
- 增强需要的方法
- 实现不需要增强的方法,方法体重调用成员变量存放的其他实现类对应的方法
接口A
package cn.zbx.test.method1;
public interface Car {
public void run();
public void stop();
}
实现类B
package cn.zbx.test.method1;
public class QQCar implements Car {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("像蜗牛一样跑起来");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("用脚当刹车");
}
}
装饰者代理类C
package cn.zbx.test.method1;
public class GZCar implements Car {
private Car qq;
public GZCar(Car car) {
this.qq = car;
}
@Override
public void run() {
// TODO Auto-generated method stub
qq.run();
System.out.println("像蜗牛一样跑起来");
System.out.println("5秒破百");
}
@Override
public void stop() {
// TODO Auto-generated method stub
qq.stop();
}
}