代理模式
2026/8/24大约 1 分钟
代理模式
给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
定义与场景
定义:对象的结构模式,为对象提供代理,由代理控制对原对象的引用。
使用场景:客户不想或不能直接引用一个对象时,由代理在客户端与目标对象之间起中介作用。
三个角色
| 角色 | 职责 |
|---|---|
| 抽象对象角色 | 声明目标对象与代理对象的共同接口 |
| 目标对象角色 | 定义代理所代表的目标对象 |
| 代理对象角色 | 内部持有目标对象引用,提供相同接口;在调用前后可执行额外操作 |
优点与缺点
优点:增加本地化扩展性、存取操作控制。
缺点:产生多余的代理类。
Android 中的实现:ContextWrapper
public abstract class Context {
public abstract void startActivity(Intent intent);
}
public class ContextWrapper extends Context {
Context mBase; // 代理类,实为 ContextImpl 对象
@Override
public void startActivity(Intent intent) {
mBase.startActivity(intent); // 核心工作交由代理对象 mBase 实现
}
}
class ContextImpl extends Context {
@Override
public void startActivity(Intent intent) {
// Context 的真正实现
}
}ContextWrapper 持有一个 ContextImpl 引用,将方法调用委托给它,即代理模式在 Android 框架中的典型应用。