欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 23种设计模式-结构型模式之代理模式(Java版本)

23种设计模式-结构型模式之代理模式(Java版本)

2025/4/22 12:38:38 来源:https://blog.csdn.net/DreamCollector/article/details/147387874  浏览:    关键词:23种设计模式-结构型模式之代理模式(Java版本)

Java 代理模式(Proxy Pattern)详解

🧭 什么是代理模式?

代理模式是结构型设计模式之一,为其他对象提供一个代理以控制对这个对象的访问

就像生活中的“经纪人”,你无法直接联系明星,但可以通过代理来安排见面或业务。


🧠 使用场景

  • 控制对象访问(权限控制)
  • 延迟加载(虚拟代理)
  • 远程代理(调用远程服务)
  • 增强原始对象功能(如日志、事务)

🏗️ 模式结构

  • Subject(抽象主题):定义代理与真实对象的公共接口
  • RealSubject(真实主题):实际执行操作的对象
  • Proxy(代理对象):控制对真实对象的访问

✅ 示例:上网代理

抽象接口

public interface Internet {void access(String site);
}

真实主题

public class RealInternet implements Internet {@Overridepublic void access(String site) {System.out.println("访问网站: " + site);}
}

代理类:禁止访问黑名单网站

import java.util.Arrays;
import java.util.List;public class InternetProxy implements Internet {private Internet realInternet = new RealInternet();private List<String> bannedSites = Arrays.asList("facebook.com", "youtube.com");@Overridepublic void access(String site) {if (bannedSites.contains(site)) {System.out.println("访问被禁止:" + site);} else {realInternet.access(site);}}
}

客户端调用

public class Main {public static void main(String[] args) {Internet internet = new InternetProxy();internet.access("google.com");internet.access("facebook.com");}
}

🧩 优点

  • 控制对象访问权限,保护真实对象
  • 降低系统耦合度,增强灵活性
  • 可扩展真实对象的功能(如添加日志、安全控制)

⚠️ 缺点

  • 增加系统类的数量
  • 部分代理模式可能引入性能开销

🍭 常见实现

  1. 静态代理:手动写代理类,上例就是静态代理。
  2. 动态代理(JDK Proxy):运行时生成代理类,接口必须存在。
  3. CGLIB 代理:用于没有接口的类,通过继承实现代理。

✅ 使用建议

适合用在:

  • 安全控制(如登录验证)
  • 缓存或延迟加载(如图片加载)
  • 远程调用(如 RPC、RMI)
  • 日志、事务等功能增强

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词