代理是一种结构型设计模式, 让你能提供真实服务对象的替代品给客户端使用。 代理接收客户端的请求并进行一些处理 (访问控制和缓存等), 然后再将请求传递给服务对象。
代理对象拥有和服务对象相同的接口, 这使得当其被传递给客户端时可与真实对象互换。
复杂度:
流行度:
使用示例: 尽管代理模式在绝大多数 Java 程序中并不常见, 但它在一些特殊情况下仍然非常方便。 当你希望在无需修改客户代码的前提下于已有类的对象上增加额外行为时, 该模式是无可替代的。
Java 标准程序库中的一些代理模式的示例:
识别方法: 代理模式会将所有实际工作委派给一些其他对象。 除非代理是某个服务的子类, 否则每个代理方法最后都应该引用一个服务对象。
缓存代理
在本例中, 代理模式有助于实现延迟初始化, 并对低效的第三方 YouTube 集成程序库进行缓存。
当你需要在无法修改代码的类上新增一些额外行为时, 代理模式的价值无可估量。
some_cool_media_library
some_cool_media_library/ThirdPartyYouTubeLib.java: 远程服务接口
some_cool_media_library/ThirdPartyYouTubeClass.java: 远程服务实现
some_cool_media_library/Video.java: 视频文件
proxy
proxy/YouTubeCacheProxy.java: 缓存代理
downloader
downloader/YouTubeDownloader.java: 媒体下载应用
Demo.java: 初始化代码
OutputDemo.txt: 执行结果