大战设计模式【15】—— 代理模式

代理模式(Proxy)

设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

一、定义

给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

二、结构

Subject(抽象主题角色):声明真实主题和代理主题的共同接口,使得在任何使用真实主题的地方都可以使用代理主题。

Proxy(代理主题角色):代理主题角色内部包含了对真实主题的引用,从而可以在任何时候操作真实主题对象;

RealSubject(真实主题角色):定义了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作。

三、优点

协调了调用者和被调用者,一定程度上降低了系统的耦合度

客户端针对抽象主题角色编程,增加和更换代理类无须修改源代码

四、缺点

在不必要的情况下使用代理会导致性能下降

五、应用场景

客户端需要访问远程主机中的对象时

需要一个消耗资源较少的对象来代表一个消耗资源较多的对象

需要控制对一个对象的访问,为不同用户提供不同级别的访问权限

六、个人总结

1、代理模式简单来说就是:

对一个类建立一个代理,那么只要你要访问这个类,那么就必须先访问代理类,然后由代理类来帮你访问这个类。

从现实中举例就像是一个明星的经纪人,你无法直接访问明星,必须先通过他的经济人。

2、java中对代理模式的实现称为动态代理

具体见例子中的代码

3、代理模式主要适用于

一个对象必须要被安全的访问

需要控制一个对象的访问权限

需要远程访问一个对象

原文地址:https://www.cnblogs.com/linkstar/p/7774775.html