文章目录
- 一、代理模式
- 二、代理模式示例
- 1、主题对象 Subject
- 2、被代理对象 RealSubject
- 3、代理对象 Proxy
- 4、客户端 Client
一、代理模式
代理模式 : 为 指定对象 提供一种代理 , 控制 对该 指定对象 的 访问 ; 代理的核心作用就是 " 控制访问 " ;
代理模式结构 : 代理模式中的元素有 客户端 , 主题对象 , 被代理对象 , 代理对象 ;
- 客户端 持有 主题对象 , 调用其方法 ;
- 代理对象 和 被代理对象 都是 主题 的子类 ;
- 代理对象 持有 被代理对象 , 可以调用 被代理对象 的方法 ;
代理模式的核心 : 代理对象 与 被代理对象 都实现同一个父类或接口 , 这样在客户端使用时 , 客户端 感觉自己与 被代理对象 沟通 , 但用户实际上与 代理对象 进行沟通 ;
二、代理模式示例
1、主题对象 Subject
代码语言:javascript复制/**
* 目标接口
* 代理对象 和 被代理对象 都要实现该接口
*/
public interface Subject {
void request();
}
2、被代理对象 RealSubject
代码语言:javascript复制/**
* 被代理对象
*/
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("被代理对象 RealSubject request()");
}
}
3、代理对象 Proxy
代码语言:javascript复制/**
* 代理对象
*/
public class Proxy implements Subject {
/**
* 代理对象中持有被代理对象的引用
* 在构造方法中注入
*/
private Subject subject;
public Proxy(Subject subject) {
this.subject = subject;
}
@Override
public void request() {
// 调用代理对象的方法时, 实际调用的是被代理对象方法
this.subject.request();
}
}
4、客户端 Client
代码语言:javascript复制public class Client {
public static void main(String[] args) {
// 被代理对象
Subject realSubject = new RealSubject();
// 代理对象
Subject proxy = new Proxy(realSubject);
// 执行代理对象方法, 调用被代理对象方法
proxy.request();
}
}
执行结果 :