软件设计模式-代理模式
代理模式
应用场景:
1.静态代理:
用户希望通过代理类的对象调用真实类的对象的方法,并且希望在调用真实类的对象之前,自定义进行某些操作。
其实想要实现这样的操作有很多种方法,继承,装饰者模式都可以,但是静态代理考虑到只是调用真实类的对象的一个方法而已,没必要使用装饰者模式(将真实类对象作为自己的成员),这样可以将代理类和真实类独立开来。具体做法:让代理类和真实类都实现同一个接口,然后代理类在重写接口的方法时自行添加某些操作。
// 抽象接口
public interface Subject {
void request();
}
// 真实对象
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
// 代理对象
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
System.out.println("Proxy: Before request.");
realSubject.request();
System.out.println("Proxy: After request.");
}
}
// 客户端
public class Client {
public static void main(String[] args) {
Subject proxy = new Proxy();
proxy.request(); // 客户端只与接口Subject打交道
}
}
2.动态代理:
本文作者:torrentgz
本文链接:https://www.cnblogs.com/torrentgz/p/18425418
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!