1. 定义
代理模式就是给对象提供一个代理,用来控制对对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
2. 类图
3. 对象展示
4. 场景及过程
为真实资源添加代理资源并将数据存入缓存.
real_source = Source('picture.jpg')
proxy = SourceProxy(real_source)
client = Client(proxy)
client.show() // 真实资源的第一次调用
client.show() // 通过代理存入缓存的调用
5. 与装饰器模式区别
- 装饰器模式强调的是增强自身,在被装饰之后你能够在被增强的类上使用增强后的功能。增强后还是自己,只不过能力更强了而已;代理模式强调要让别人帮你去做一些本身与你业务没有太多关系的职责(记录日志、设置缓存)。代理模式是为了实现对象的控制,因为被代理的对象往往难以直接获得或者是其内部不想暴露出来。
- 装饰模式是以对客户端透明的方式扩展对象的功能,是继承方案的一个替代方案;代理模式则是给一个对象提供一个代理对象,并由代理对象来控制对原有对象的引用;
- 装饰模式是为装饰的对象增强功能;而代理模式对代理的对象施加控制,但不对对象本身的功能进行增强;
6. 应用场景分析
nginx代理,缓存数据,日志记录,隐藏真实对象等
把微服务当做一个整体,cbs就相当于代理了很多微服务
7. 优缺点
优点:
被代理的对象只需要实现与自己相关的业务
扩展性高
保护被代理对象的访问权限
缺点:
被代理对象增加业务逻辑也需要在代理类中增加逻辑
需要先设计出真实的对象才能对该对象进行代理