1.代理模式定义
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
1.1 UML图:
- Subject(主题接口) :定义了真实对象和代理对象的共同接口。
- RealSubject(真实主题类) :定义了代理类所代表的真实对象,通常实现了Subject接口。
- Proxy(代理类) :持有RealSubject的引用,并在请求传递给RealSubject之前或之后进行一些操作。
1.2 核心代码:
public class DemoCode {
public static void main(String[] args){
System.out.println("**********************************************");
System.out.println("代理模式");
System.out.println();
Proxy proxy = new Proxy();
proxy.request();
System.out.println();
System.out.println("**********************************************");
}
}
//ISubject接口
interface ISubject{
void request();
}
//RealSubject类
class RealSubject implements ISubject {
public void request(){
System.out.println("真实的请求。");
}
}
//Proxy类
class Proxy implements ISubject{
private RealSubject rs;
public Proxy(){
this.rs = new RealSubject();
}
public void request(){
this.rs.request();
}
}
执行结果:
2. 代理模式的优缺点;
优点:
- 提供了对真实对象的控制,可以增加额外的功能,比如访问控制、缓存、延迟加载、日志记录等等。
- 通过动态代理可以减少代码冗余,提高代码的灵活性和可扩展性。
缺点:
- 增加了系统的复杂度,因为每个真实对象都需要有一个代理类来配合工作。
- 如果代理层次过多,可能会影响性能,尤其是动态代理在性能上会有一定的损耗。
应用场景:
1.延迟加载:当一个对象的创建成本非常高,且不一定每次都需要使用该对象时,可以通过代理来控制对象的创建时机,避免不必要的资源浪费。
2.访问控制:通过代理类可以控制对原对象的访问权限,只有在满足特定条件下才允许访问。
3.远程代理:当对象在远程服务器上时,可以通过代理类来模拟远程对象的行为。
4.日志记录和性能监控:在代理类中可以加入日志记录、性能监控等功能,不需要修改真实对象的代码。
3. 总结
为其他对象提供一种代理以控制对这个对象的访问
4.参考
- https://cloud.tencent.com/developer/article/2012049
- https://juejin.cn/post/7496345865231597579#heading-15