装饰器模式简介
装饰器模式(Decorator Pattern)在不改变原对象的基础上,通过对其进行包装和拓展,使原有对象满足更复杂的需求。这种模式属于结构性模式。
为什么使用装饰器模式
- 灵活: 为对象添加功能的时候,装饰器模式比继承更为灵活,并且可以把功能分离到每个装饰器中;
- 可复用: 装饰对象和原对象具有相同的接口,可以使客户以与原对象相同的方式使用装饰对象;
- 减少子类扩张:扩展功能可以在装饰器中实现;
组件
- 抽象组件(Component):定义了一组抽象的接口,规定这个被装饰类有哪些功能;
- 具体构件(ConcreteComponent):实现这个抽象组件的所有功能的具体类;
- 装饰器(Decorator):持有一个具体的被装饰对象,并实现接口类继承的公共接口;
- 具体的装饰器(ConcreteDecorator):具体的装饰器实现者,负责实现装饰器角色定义的功能;
使用场景
- 不影响其他对象的情况下,以动态、透明的方式给对象增加职责
- 不能使用子类进行扩展的时候
- 限制对象的执行条件
Note:使用装饰器模式会出现更多的代码,更多的类,增加程序的复杂性
总结
装饰器模式本质上是对现有类对象的包装和扩展,从而得到一个加强版的对象。
装饰器模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。
装饰模式是针对抽象组件(Component)类型编程。如果你要针对具体组件编程时,就应该重新思考你的应用架构,预判装饰者是否合适。当然也可以改变Component接口,增加新的公开的行为,实现“半透明”的装饰者模式。在实际项目中要做出最佳选择。
结尾:欢迎关注我的简书!您的鼓励是我最大动力!