知识卡片

装饰角色本质是特殊化的代理

普通读书笔记卡 · 1989.a.1

内容

[[装饰模式的定义与四个角色]]中Decorator的结构和[[代理模式的定义与三个角色]]几乎一致: 都持有真实对象引用并委托执行。区别在意图——代理重点是控制访问,被代理对象行为不变; 装饰重点是在委托基础上叠加新职责,先后顺序在具体装饰类里是写死的。发散:识别是代理 还是装饰关键看目的,限制访问是代理,叠加新行为是装饰;更多优缺点对比见 [[代理模式与装饰模式结构相同但意图不同]]。

参考来源

- 位置:《设计模式之禅(第2版)》第17章《装饰模式》(源文件:_epub-src/text/part0076.html、part0077.html) - 结论依据:原文明确"如果大家还记得代理模式,那么很容易看懂这个类图,装饰类的作用也就是一个特殊的代理类,真实的执行者还是被代理的角色",并说明装饰类内部的方法委托给component.operate()执行,同时通过方法重写在委托前后插入自己的修饰逻辑。 - 原始内容:如果大家还记得代理模式,那么很容易看懂这个类图,装饰类的作用也就是一个特殊的代理类,真实的执行者还是被代理的角色FouthGradeSchoolReport……原始方法和装饰方法的执行顺序在具体的装饰类是固定的,可以通过方法重载实现多种执行顺序。