前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11.设计模式--装饰者模式(Decorator模式)

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

作者头像
大猫的Java笔记
发布2021-11-11 09:40:43
6230
发布2021-11-11 09:40:43
举报
文章被收录于专栏:大猫的Java笔记大猫的Java笔记

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的Java笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档