静态代理实现:
举个简单的栗子:
我们(目标角色)需要租房(共同行为),我们找的是房屋中介(存在租房的共同行为),而房屋中介不仅会完成我们租房的需求,还会帮我们找房源,拟定合同等事务(增强共同行为)。
接口: 共同行为
public interface RentHouse {
//租房
void toRentHouse();
}
目标角色: 实现行为,被代理类
public class Tenant implements RentHouse {
@Override
public void toRentHouse() {
System.out.println("租房子");
}
}
代理对象: 实现行为,增强目标对象的实现行为
public class Agency implements RentHouse{
//目标角色
private RentHouse target;
//带参构造将目标角色传入代理类
public Agency(RentHouse target) {
this.target=target;
}
@Override
public void toRentHouse() {
//功能扩展
System.out.println("发布租房信息");
System.out.println("拟定合同");
//实现目标角色方法
target.toRentHouse();
//功能扩展
System.out.println("后续工作");
}
}
测试:
public class TestStaticProxy {
public static void main(String[] args) {
//1:得到目标角色
Tenant target=new Tenant();
//2:得到代理角色
RentHouse agency=new Agency(target);
//3:代理角色实现目标角色行为
agency.toRentHouse();
}
}
静态代理三要素:
- 共同行为->接口
- 目标角色->实现行为
- 代理角色->实现行为,增强目标对象的实现行为
静态代理特点:
- 目标角色固定(只能为某一目标角色做代理,比较单一)
- 在程序执行前需要得到目标角色
- 代理对象会增强目标对象行为
- 当有大量代理行为时,存在多个代理类
静态代理存在的问题:
当存在大量代理行为,我们必须创建多个代理类,代理类和目标类存在一对一的关系,容易造成"类爆炸"。