设计模式-代理模式

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的方法,这种场景就是使用代理模式来实现安全代理

posted @   知识海洋中的浮萍  阅读(26)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示