代理模式速览
代理模式就是在调用方和目标对象之间加一个中间人,以便在不修改目标代码的前提下增加额外行为。以房屋租赁为例,房东只负责租房,中介可以带上带看、签合同这些活儿。
| 角色 | 对应示例 | 作用说明 |
|---|---|---|
| Subject | HouseSubject 接口 | 定义目标对象和代理的共同行为('租房') |
| RealSubject | RealHouseSubject(房东) | 目标对象,实际干活的人 |
| Proxy | HouseProxy(中介) | 代理类,包装目标对象,前后添加增强逻辑 |
静态代理:手工写代理类
静态代理需要提前写好代理类,一个代理对应一个接口。
// 公共接口
public interface HouseSubject {
void rentHouse();
}
// 目标对象(房东)
public class RealHouseSubject implements HouseSubject {
@Override
public void rentHouse() {
System.out.println("房东出租房屋");
}
}
// 代理类(中介)
public class HouseProxy implements HouseSubject {
private HouseSubject target;
public HouseProxy(HouseSubject target) {
this.target = target;
}
@Override
public void rentHouse() {
System.out.println();
target.rentHouse();
System.out.println();
}
}
( ());
agent.rentHouse();


