请给我一个有关代理类的简单易懂的例子
时间: 2023-08-05 17:10:45 浏览: 36
假设有一个电影票售卖系统,我们可以使用代理类来限制未成年人的购票权限。具体实现如下:
首先,我们定义一个电影票售卖接口 `MovieTicket`,它包含了售票的方法 `sellTicket()`:
```
public interface MovieTicket {
void sellTicket();
}
```
然后,我们实现一个电影票售卖类 `RealMovieTicket`,它实现了 `MovieTicket` 接口:
```
public class RealMovieTicket implements MovieTicket {
@Override
public void sellTicket() {
System.out.println("售卖电影票");
}
}
```
接下来,我们定义一个代理类 `ProxyMovieTicket`,它也实现了 `MovieTicket` 接口,同时包含了一个 `RealMovieTicket` 类型的成员变量 `realMovieTicket`:
```
public class ProxyMovieTicket implements MovieTicket {
private RealMovieTicket realMovieTicket;
public ProxyMovieTicket(RealMovieTicket realMovieTicket) {
this.realMovieTicket = realMovieTicket;
}
@Override
public void sellTicket() {
if (checkAge()) {
realMovieTicket.sellTicket();
} else {
System.out.println("未满18岁,无法购票");
}
}
private boolean checkAge() {
// 检查是否满18岁
return true; // 假设通过检查
}
}
```
在代理类 `ProxyMovieTicket` 中,我们重写了 `sellTicket()` 方法,并添加了一个 `checkAge()` 方法来检查购买者是否满18岁。如果购买者未满18岁,则代理类不会调用真正的售票方法,而是提示购票失败。
最后,我们可以使用以下代码来进行测试:
```
public class Main {
public static void main(String[] args) {
RealMovieTicket realMovieTicket = new RealMovieTicket(); // 创建真正的电影票售卖对象
ProxyMovieTicket proxyMovieTicket = new ProxyMovieTicket(realMovieTicket); // 创建代理对象
proxyMovieTicket.sellTicket(); // 调用代理对象的售票方法
}
}
```
如果购买者满18岁,则代理类会调用真正的售票方法,输出 `售卖电影票`;否则,代理类会提示购票失败,输出 `未满18岁,无法购票`。这就是一个简单的代理类的例子。