装饰模式
装饰模式
- 场景
- 对已有模块进行额外的行为操作(增加或者是撤销)
- 当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。不能采用继承的情况主要有两类:第一类是系统中存在大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;第二类是因为类定义不能继承(如final类).
- 角色
- 抽象接口
- 装饰抽象类(implements 抽象接口)
- 抽象实现类(实现 抽象接口)
- 装饰实现类(实现 装饰抽象类)
- 优点
- 不需要多重继承,装饰灵活
- 装饰组合灵活
- 新增额外行为不会影响原有系统,符合开闭原则
- 缺点
- 在过程中会生成多个动态的子类,增加系统的开销以及复杂度
- 多种装饰器,排错比较麻烦。