java 代理模式实现
时间: 2023-06-29 10:13:26 浏览: 117
代理模式是一种常用的设计模式,其主要作用是为其他对象提供一种代理以控制对这个对象的访问。代理模式在 Java 中可以通过接口实现,也可以通过继承实现。下面分别介绍这两种实现方式。
1. 接口实现代理模式
接口实现代理模式需要定义一个接口和一个代理类,代理类实现接口并持有一个接口的引用,通过代理类来间接访问目标对象。
示例代码如下:
```java
// 定义接口
public interface Subject {
void doSomething();
}
// 目标对象
public class RealSubject implements Subject {
@Override
public void doSomething() {
System.out.println("RealSubject do something");
}
}
// 代理类
public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void doSomething() {
System.out.println("Before realSubject do something");
realSubject.doSomething();
System.out.println("After realSubject do something");
}
}
// 测试
public class Test {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.doSomething();
}
}
```
运行结果:
```
Before realSubject do something
RealSubject do something
After realSubject do something
```
2. 继承实现代理模式
继承实现代理模式需要定义一个目标对象和一个代理对象,代理对象继承目标对象并重写目标对象的方法,在方法中间接访问目标对象。
示例代码如下:
```java
// 目标对象
public class RealSubject {
public void doSomething() {
System.out.println("RealSubject do something");
}
}
// 代理对象
public class Proxy extends RealSubject {
@Override
public void doSomething() {
System.out.println("Before realSubject do something");
super.doSomething();
System.out.println("After realSubject do something");
}
}
// 测试
public class Test {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.doSomething();
}
}
```
运行结果:
```
Before realSubject do something
RealSubject do something
After realSubject do something
```
无论是接口实现还是继承实现,代理模式的核心是代理类和目标对象的分离,通过代理类来控制对目标对象的访问,可以在不改变目标对象的情况下增加或修改一些额外的功能。
阅读全文