用java代码举例说明代理模式
时间: 2024-03-22 19:03:24 浏览: 68
以下是一个简单的Java代码示例,演示了如何使用代理模式来访问远程服务器:
```java
// 远程接口
interface RemoteService {
String getData(String query);
}
// 实现远程接口的具体类
class RemoteServiceImpl implements RemoteService {
public String getData(String query) {
// 实际的远程调用代码
System.out.println("Querying remote server with query: " + query);
return "Result for " + query;
}
}
// 代理类
class RemoteServiceProxy implements RemoteService {
private RemoteService remoteService;
public RemoteServiceProxy() {
this.remoteService = new RemoteServiceImpl();
}
public String getData(String query) {
// 在访问远程服务器之前进行身份验证、缓存数据、记录日志等操作
System.out.println("Authenticating user...");
System.out.println("Checking cache for data...");
// 如果已经缓存了数据,直接返回缓存的结果
String cachedResult = getCachedResult(query);
if (cachedResult != null) {
return cachedResult;
}
// 否则,访问远程服务器并记录结果到缓存中
String result = remoteService.getData(query);
cacheResult(query, result);
System.out.println("Logging query and result...");
return result;
}
private String getCachedResult(String query) {
// 检查缓存中是否已经有结果
return null;
}
private void cacheResult(String query, String result) {
// 将结果缓存起来
}
}
// 使用代理类访问远程服务器
RemoteService proxy = new RemoteServiceProxy();
String result = proxy.getData("some query");
System.out.println(result);
```
在这个示例中,`RemoteService`是远程接口,`RemoteServiceImpl`是实现该接口的具体类。`RemoteServiceProxy`是代理类,它代表了客户端和`RemoteServiceImpl`之间的中介。当客户端通过代理类访问远程服务器时,代理类会在访问服务器之前进行身份验证、缓存数据、记录日志等操作。如果已经缓存了数据,代理类会直接返回缓存的结果;否则,代理类会访问远程服务器并记录结果到缓存中。这样,代理类可以提高系统的性能、安全性和可维护性。
阅读全文