设计模式之代理模式(proxy pattern)
2019-05-31 23:39
1926 查看
代理模式的本质是一个中间件,主要目的是解耦合服务提供者和使用者。使用者通过代理间接的访问服务提供者,便于后者的封装和控制。是一种结构性模式。
1.目的
为外部调用者提供一个访问服务提供者的代理对象。
2.动机
限制对目标对象的直接访问,降低耦合度。
3.优缺点
优点:
优点:
- 低耦合
- 易扩展
- 灵活度高
缺点:
- 间接访问可能会延迟请求相应
- 增加工作量
4.分类
- 静态代理
- 动态代理
代理类本身的实现可能并不简单,加上每一个需要代理的对象均均需要实现一个代理类,其工作量本身比较大,易出错。
所谓动态代理(DynamicProxy)是指在程序运行时动态的生成对目标对象的访问接口。
本文主要介绍前者,关于后者可以参考JDK自带的动态代理。
5.主要用途
代理模式在以下场景比较适用:
1、远程代理。 2、虚代理。 3、保护代理。4、智能指引代理。5、写时复制(Copy-on-Write)代理。 6、缓存代理。 7、防火墙代理。 8、同步化代理。
6.原理
下面是GoF介绍典型的代理模式UML类图
public class SmartPointer implements Obj{ private RealObj realObj; private int counter = 1; public SmartPointer(String objType){ this.realObj = new RealObj(objType); } @Override public void GetAttr() { if(counter > 0) { realObj.GetAttr(); } System.out.println("Smart Ref: " + counter); } public Obj copy() { if(counter > 0) { counter += 1; return this; } System.out.println("Invalid Pointer!"); return null; } public void delete() { if(counter > 0) { counter -= 1; if(0 == counter) { realObj = null; } } else { System.out.println("Invalid Pointer!"); } } }View Code 被引用对象类RealObj:
public class RealObj implements Obj { private String objType; public RealObj(String objType) { this.objType = objType; System.out.println("Create Obj: " + objType); } @Override public void GetAttr() { System.out.println("get attr of real obj " + objType); } @Override public Obj copy() { // TODO Auto-generated method stub return null; } @Override public void delete() { // TODO Auto-generated method stub } }View Code
参考:
GoF《Design Patterns: Elements of Reusable Object-Oriented Software》
https://www.runoob.com/design-pattern/proxy-pattern.html
相关文章推荐
- 如何让孩子爱上设计模式 ——13.代理模式(Proxy Pattern)
- 设计模式原来如此-代理模式(Proxy Pattern)
- 设计模式2 - 代理模式【Proxy Pattern】
- 设计模式(13)——代理模式(Proxy Pattern)
- 设计模式(四)代理模式(Proxy Pattern)
- 极速理解设计模式系列:3.代理模式(Proxy Pattern)
- Python实现设计模式--06.代理模式(Proxy Pattern)
- 设计模式之代理模式(Proxy Pattern)
- 23种设计模式之-----代理模式(Proxy Pattern)
- 设计模式--代理模式【Proxy Pattern】
- java设计模式-代理模式(Proxy Pattern)
- C#设计模式之十二代理模式(Proxy Pattern)【结构型】
- 24种设计模式--代理模式【Proxy Pattern】
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 详解
- 设计模式——代理模式【Proxy Pattern】
- Java23种设计模式 代理模式【Proxy Pattern】
- 极速理解设计模式系列:3.代理模式(Proxy Pattern)
- .NET设计模式-代理模式(Proxy Pattern)
- "围观"设计模式(12)--结构型之代理模式(Proxy Pattern)
- 【设计模式】 代理模式(Proxy Pattern)- 最易懂的设计模式解析