java实现代理者模式
时间: 2023-07-07 19:20:58 浏览: 71
在 Java 中,代理者模式可以通过接口实现或者继承实现来实现。下面我将分别介绍这两种实现方式。
1. 接口实现
定义一个抽象主题角色的接口 Subject,真实主题角色 RealSubject 和代理角色 ProxySubject 都实现该接口。具体实现类 RealSubject 实现了真实的业务逻辑,而代理类 ProxySubject 则用于控制客户端对真实主题角色的访问。
```
// 抽象主题角色
interface Subject {
void request();
}
// 真实主题角色
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject is handling the request.");
}
}
// 代理角色
class ProxySubject implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
System.out.println("ProxySubject is handling the request.");
realSubject.request();
}
}
```
在这个例子中,代理角色会检查真实主题角色是否已经被创建,如果没有则创建它。在代理角色的 request() 方法中,先输出一句话表示代理角色正在处理请求,然后再调用真实主题角色的 request() 方法。
2. 继承实现
在继承实现中,代理角色继承真实主题角色,并在自己的方法中控制对真实主题角色的访问。
```
// 真实主题角色
class RealSubject {
public void request() {
System.out.println("RealSubject is handling the request.");
}
}
// 代理角色
class ProxySubject extends RealSubject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
System.out.println("ProxySubject is handling the request.");
realSubject.request();
}
}
```
在这个例子中,代理角色继承了真实主题角色,并重写了 request() 方法。在代理角色的 request() 方法中,先输出一句话表示代理角色正在处理请求,然后再调用真实主题角色的 request() 方法。
无论是哪种实现方式,代理者模式都可以帮助我们实现对对象的访问控制、缓存、延迟加载等功能。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)