11.设计模式--装饰者模式(Decorator模式)

1.定义

装饰者模式是一种结构型模型,是动态的给对象增加职责,对于新增功能来说要比通过子类方式更加的灵活。

想想一下现在有一块蛋糕,他本质上就是一个蛋糕,而如果在蛋糕上加上巧克力就变成了巧克力蛋糕,而如果在蛋糕上加上草莓就变成了草莓蛋糕,如果插上代表年龄的蜡烛就变成了生日蛋糕。不管怎么变本质上都是蛋糕,只是对蛋糕进行了装饰而已。

话说曹操最看重的人莫过于关羽了,为了让关羽效忠自己又是送美女,又是送钱粮,但是关羽岂是看重如此俗物之人,他可一心只想着大哥刘备。曹操为了感化关羽一日将吕布死后剩余的日行千里的坐骑,"赤兔马"赠予关羽。如今关羽已经手握青龙偃月刀,脚踏赤兔马。通过这两种属性的装饰,如今的关羽早已战力大增。

你看关羽始终只是关羽,无论是增加了青龙偃月刀还是赤兔马本质上还是关羽,只是做了一些装饰,而青龙偃月刀和赤兔马就相当于装饰物,而关羽则是被装饰物。

2.装饰者模式结构图

Info为抽象类,为信息类,主要扮演角色为Component,相当于蛋糕或基本信息,为了协调装饰物与被装饰物的一致性。Person是Info的子类,扮演的角色为ConcreteComponent,相当于具体的蛋糕或关羽。AdditionalInfo同样也是Info的子类,只不过也是抽象类,扮演的角色为Decorator,相当于装饰物的抽象,而Arms和Mount则是对装饰物的具体实现,扮演ConcreteDecorator角色。

图片

3.装饰者模式实现

Info为抽象类,为信息类,主要扮演角色为Component,同时提供两个方法,一个获取基本信息,另一个获取所有信息,包括附加信息。

图片

Person是Info的子类扮演的角色为ConcreteComponent,其中获取基本信息和所有信息都是获取的name字段,因为人员的信息现在没有进行装饰,所以所有信息依然是name字段。

图片

AdditionalInfo同样也是Info的子类,只不过也是抽象类,扮演的角色为Decorator,相当于装饰物的抽象,同时增加了一个获取附加信息的抽象方法,此方法是子类进行实现。同时Info作为委托在字段中。

图片

Arms则是对装饰物的具体实现,扮演ConcreteDecorator角色。其中包括获取基本信息、获取武器信息、以及所有信息方法。

图片

同样Mount也是是对装饰物的具体实现,扮演ConcreteDecorator角色。其中包括获取基本信息、获取坐骑信息、以及所有信息方法。

图片

现在将关羽进行装饰,给附上青龙偃月刀以及赤兔马进行装饰,此时关羽已经可以随意斩颜良,诛文丑。

图片

图片

参考文献《图解设计模式》

代码获取地址:https://gitee.com/bughong/design-pattern

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值