设计模式-代理模式
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的方法,这种场景就是使用代理模式来实现安全代理
浙公网安备 33010602011771号