代理模式
代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替实际对象的对象。这些操作通常涉及与“实际”对象的通信,因此代理通常充当这中间人的角色。下面通过代码结构演示一遍
1. 定义一个接口
public interface Interface { void doSomething(); void somethingElse(String arg); }
2. 定义一个实际对象实现这个接口
public class RealObject implements Interface {
@Override
public void doSomething() {
System.out.println("实现---doSomething");
}
@Override
public void somethingElse(String arg) {
System.out.println("实现---somethingELse");
}
}
3. 构建一个simpleProxy代理类同时实现了Interface
public class SimpleProxy implements Interface {
//定义一个接口类型变量强制将变量设置为接口类型
private Interface proxied;
public SimpleProxy(Interface proxied) {
this.proxied = proxied;
}
@Override
public void doSomething() {
System.out.println("我又实现了---doSomething");
}
@Override
public void somethingElse(String arg) {
System.out.println("我又实现了---somethingElse");
}
}
测试使用代理类来调用方法
public class SimpleProxyDemo {
public static void consumer(Interface iface) {
iface.doSomething();
iface.somethingElse("hello world");
}
public static void main(String[] args) {
consumer(new RealObject());
//将真实对象作为构造参数传入
consumer(new SimpleProxy(new RealObject()));
}
}
consumer()接受的Interface,所以它无法知道正在获得的到底是RealObject还是SimpleProxy,因为这两者都实现了Interface。但是SimpleProxy已经被插入到了客户端和RealObject之前,因此它会执行,然后调用RealObject上相同的方法
注:使用代理模式其核心是在代理类中定义一个接口类型的成员变量
参考 Think In Java