概念:动态为对象添加功能。
是一种替换继承关系的方案。无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
装饰设计模式在设计模式定位:结构型模式,把类或对象结合在一起形成更大的结构。
干什么:动态给对象添加新的功能。
作用:避免因为继承关系,某个类个数快速增长,同时也避免了继承关系中类与类之间耦合度高。详细解析见下文。
装饰模式核心知识点:
抽象组件角色:一个抽象接口。装饰对象和被装饰对象【具体组件对象】共有的父类接口。这样客户端对象就能以相同的方式操作具体组件对象和装饰对象【或者说可以将装饰类作为组件类看待】
具体组件角色:抽象组件的基本实现类。装饰模式是为这个基类动态添加新功能。
抽象装饰角色:装饰对象包含一个真实组件对像的引用。它的作用是接受需要扩展功能的具体组件类;实现抽象组件接口,使得在动态添加功能时具体装饰类和具体组件类用法相同,使模式更加灵活。
具体装饰角色:为抽象装饰角色的实现类。负责为接受的具体组件类添加新的功能或优化功能。
实现:虚线、三角箭头 ; 依赖:虚线、箭头 ; 聚合:实线、菱形
ICar :抽象组件角色
RunICar:具体组件角色(被装饰类)。实现抽象组件角色。它具有组件类的基本功能,装饰类的存在是为了扩展它的功能。
ICarDecorator:抽象装饰角色。实现抽象组件角色【使具体装饰角色也可以作为具体组件添加新的功能或优化功能】