装饰模式

装饰模式

在不改变现有对象结构的情况下,动态的给该对象增加些其他职责

eg:房子装修,手机带壳,化妆,p图

优缺点

优点

装饰模式扩展对象的方式优于继承

多个装饰类组合使用

缺点:过度使用程序复杂

角色

通常情况下扩展一个类会用继承的方式,但是继承具有静态特征,耦合度高,所以有了新的方案装饰模式

  • 抽象构建角色:定义一个抽象接口以规范准备接收附加责任的对象

  • 具体构建角色:实现抽象构建角色,通过装饰角色为其添加职责

  • 抽象装饰角色:继承抽象构建,并包含具体构建实例。可以通过其子类扩展具体的构建功能

  • 具体装饰角色:实现抽象装饰的相关方法,并给集体构建对象添加附加的职责

模拟场景

这次不说车,换一个栗子说猴哥,七十二变。猴哥可以变成银角大王、也可以变成太上老君、还可以变成唐三藏

无论猴哥变成谁,你猴哥还是你猴哥,本质,内部结构都没变,就是加上了一个其他人的外貌装饰,

这里就可以用装饰模式来表现一下这个场景

其中 猴子:抽象构件角色 孙悟空:具体构建角色(实现猴子) 看我七十二变:抽象装饰角色(抽象构建角色的子类) 太上老君:具体装饰角色1(实现[继承/实现]七十二变的相关方法,并添加附加装饰) 银角大王:具体装饰角色2(实现[继承/实现]七十二变的相关方法,并添加附加装饰)

Last updated