20230419 7. 代理模式
介绍
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
- ISubject类,定义了RealSubject和Proxy的共用接口
- RealSubject类,定义Proxy所代表的真实实体
- Proxy类,保存一个引用使得代理可以访问实体
代理模式都用在什么场合
- 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
- 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象
- 安全代理,用来控制真实对象访问时的权限
- 智能指引,是指当调用真实的对象时,代理处理另外一些事
代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。
代码示例
ISubject
public interface IGirlGift {
void giveFlowers();
void giveChocolate();
}
RealSubject
public class SchoolBoy implements IGirlGift {
private SchoolGirl schoolGirl;
public SchoolBoy(SchoolGirl schoolGirl) {
this.schoolGirl = schoolGirl;
}
@Override
public void giveFlowers() {
System.out.println("送花给 " + schoolGirl.getName());
}
@Override
public void giveChocolate() {
System.out.println("送巧克力给 " + schoolGirl.getName());
}
}
Proxy
public class Proxy implements IGirlGift {
private IGirlGift girlGift;
public Proxy(SchoolGirl schoolGirl) {
this.girlGift = new SchoolBoy(schoolGirl);
}
@Override
public void giveFlowers() {
girlGift.giveFlowers();
}
@Override
public void giveChocolate() {
girlGift.giveChocolate();
}
}
其他
@AllArgsConstructor
@Data
public class SchoolGirl {
private String name;
}
客户端
public class Test {
public static void main(String[] args) {
SchoolGirl schoolGirl = new SchoolGirl("小美");
Proxy proxy = new Proxy(schoolGirl);
proxy.giveFlowers();
proxy.giveChocolate();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南