装饰模式 vs (静态)代理模式

这两个设计模式都属于结构型模式,且很是类似,其UML图以下:
装饰模式:segmentfault

clipboard.png
以下IO方法就是使用了装饰模式:设计模式

BufferedReader reader = new BufferedReader(new InputStreamReader(Resources.getResourceAsStream(resource))

(静态)代理模式:提到代理模式通常是指静态代理模式,动态代理模式会在动态代理实现原理中专门讲解spa

clipboard.png

共同点:设计

  • 装饰者与被装饰者,代理类与被代理类,都是继承自同一个接口,能够令他们在被调用时相互替换

不一样点:代理

  • 被装饰者每每被做为装饰者的构造器参数传入装饰者,强调被装饰者功能的加强;被代理类每每在代理类内部被建立,因此这里用UML里组合的关系,强调对被代理类的访问控制。
  • 装饰者里持有的是被装饰者的接口类型,因此能够装饰全部实现同一接口的类;代理类是针对某一个具体的类进行代理,因此对每个类都要实现一个对应的代理类,这是静态代理模式的局限,能够使用动态代理模式来弥补。
相关文章
相关标签/搜索