subject接口,定义要做什么
然后RealSubject和Proxy都实现Subject接口并实现里面的方法
但是Proxy内部有一个RealSubject的引用,并且Proxy的方法全部调用RealSubject的引用的方法
从调用者来看,它调用是Proxy的方法,但实际调用的还是RealSubject的方法,
Proxy就像RealSubject的代理人
代理模式就是这么来的
/**
* @author wrj
* @description
* @Date 2021/12/2 5:35 下午
*/
//测试类
public class ProxyTest {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.delete();
}
}
//定义接口
interface CrudOperation {
public Integer insert();
public Integer delete();
public Integer update();
public Object select();
}
//创建真实对象
class RealSubject implements CrudOperation {
@Override
public Integer insert() {
return null;
}
@Override
public Integer delete() {
return null;
}
@Override
public Integer update() {
return null;
}
@Override
public Object select() {
return null;
}
}
//创建代理对象
class Proxy implements CrudOperation {
private CrudOperation realSubject;
public Proxy() {
if (realSubject == null){
realSubject = new RealSubject();
}
}
@Override
public Integer insert() {
return realSubject.insert();
}
@Override
public Integer delete() {
return realSubject.delete();
}
@Override
public Integer update() {
return realSubject.update();
}
@Override
public Object select() {
return realSubject.update();
}
}
客户端一直操作的都是Proxy类,但实际调用的还是RealSubject类
在Proxy类中的select,insert等方法,可以做一些校验然后再决定要不要真正调用RealSubject的方法,这种场景就是使用代理模式来实现安全代理