代理模式(Proxy)
设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample
一、定义
给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
二、结构
Subject(抽象主题角色):声明真实主题和代理主题的共同接口,使得在任何使用真实主题的地方都可以使用代理主题。
Proxy(代理主题角色):代理主题角色内部包含了对真实主题的引用,从而可以在任何时候操作真实主题对象;
RealSubject(真实主题角色):定义了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作。
三、优点
协调了调用者和被调用者,一定程度上降低了系统的耦合度
客户端针对抽象主题角色编程,增加和更换代理类无须修改源代码
四、缺点
在不必要的情况下使用代理会导致性能下降
五、应用场景
客户端需要访问远程主机中的对象时
需要一个消耗资源较少的对象来代表一个消耗资源较多的对象
需要控制对一个对象的访问,为不同用户提供不同级别的访问权限
六、个人总结
1、代理模式简单来说就是:
对一个类建立一个代理,那么只要你要访问这个类,那么就必须先访问代理类,然后由代理类来帮你访问这个类。
从现实中举例就像是一个明星的经纪人,你无法直接访问明星,必须先通过他的经济人。
2、java中对代理模式的实现称为动态代理
具体见例子中的代码
3、代理模式主要适用于
一个对象必须要被安全的访问
需要控制一个对象的访问权限
需要远程访问一个对象