软件设计 代理模式 Proxy Pattern
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/16984043.html
这些代理都有一个共同特点,就是使用的一致性和中间环节的透明性,也就是说找代理做的事情需要与找对象本身做的事情是一样的,只是中间环节隐藏了而已。
代理模式分为静态代理和动态代理
1、定义租赁操作(接口)
/**
* 租赁操作
*/
public interface Rent {
/**
* 租房
*/
void rentHouse();
}
2、定义房东(真实角色)
/**
* 房东
*/
public class Landlord implements Rent{
public void rentHouse() {
System.out.println("房东出租房子");
}
}
3、定义中介(代理角色)
/**
* 中介
*/
public class Intermediary implements Rent{
/**
* 房东
*/
private Landlord landlord;
public Intermediary() {
}
public Intermediary(Landlord landlord) {
this.landlord = landlord;
}
public void rentHouse() {
// 看房
seeHouse();
// 签合同
contract();
// 租房
landlord.rentHouse();
// 收取费用
toll();
}
/**
* 看房
*/
public void seeHouse() {
System.out.println("中介带你看房");
}
/**
* 签合同
*/
public void contract() {
System.out.println("签租赁合同");
}
/**
* 收取费用
*/
public void toll() {
System.out.println("收中介费");
}
}
4、租客租房(客户)
// 房东
Landlord landlord = new Landlord();
// 中介给房东代理
Proxy proxy = new Proxy(landlord);
// 租房。不用面对房东,直接找中介租房即可
proxy.rentHouse();
在这个过程中,租客直接接触的是中介,见不到房东,但是租客依旧通过代理租到了房东的房子。
优缺点:
优点
1、可以使得真实角色更加轻松,不用再去关注一些琐碎的事情。
2、公共的业务由代理来完成,实现了业务的分工。
3、公共业务发生变化时扩展更加方便。
缺点
类变多了,多了代理类,工作量变大了,开发效率降低。
使用场景:
远程(Remote)代理
虚拟(Virtual)代理
Copy-on-Write代理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」