【193期】如何利用装饰者模式在不改变原有对象的基础上扩展功能

点击上方“Java面试题精选”,关注公众号

面试刷图,查缺补漏

>>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅

阶段汇总集合:001期~180期汇总,方便阅读(增加设计模式)

阅读目录

  • 什么是装饰者模式
  • 普通示例
  • 装饰者模式示例
  • 类图关系
  • 装饰者模式使用场景
  • 装饰者模式优点
  • 装饰者模式缺点

什么是装饰者模式

装饰者模式(DecoratorPattern)是指在不改变原有对象的基础之上,将功能附加到对
象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。

装饰者模式在生活中也有很多形象的例子,比如说给蛋糕加上一些水果,给披萨加上榴莲,或者说给烧饼加上鸡蛋火腿之类等等。

下面我们就以给蛋糕加上水果为例来看看如果不用装饰者模式要怎么实现,如果使用装饰者模式又要怎么实现,对比之后就知道装饰者模式的优势了。

普通示例

新建一个普通的蛋糕类:

我是一个8英寸的普通蛋糕,价格:68
我是一个8英寸的普通蛋糕+1个芒果,价格:78
我是一个8英寸的普通蛋糕+1个芒果+1个葡萄,价格:83
我是一个8英寸的普通蛋糕+1个芒果+1个葡萄+1个芒果,价格:93

我们可以看到,使用装饰者模式之后,扩展之前的功能变得极为方便,可以根据现有的装饰器进行任意组合。

类图关系

看一下类图,首先是一个基础抽象类定义了基本方法,然后是基础实现和基础装饰器继承并重写抽象类中的方法:
【193期】如何利用装饰者模式在不改变原有对象的基础上扩展功能

装饰者模式使用场景

  • 1、用于扩展一个类的功能或给一个类添加附加职责。

  • 2、动态的给一个对象添加功能,这些功能可以再动态的撤销。

注:MyBatis中的二级缓存就是用了装饰者模式来进行动态扩展,感兴趣的可以去了解下。

往期面试题:001期~180期汇总

装饰者模式优点

  • 1、装饰者是继承的有力补充,比继承灵活,不改变原有对象的情况下动态地给一个对象 扩展功能,即插即用。

  • 2、通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。

  • 3、装饰者完全遵守开闭原则。

装饰者模式缺点

  • 1、会出现更多的代码,更多的类,增加程序复杂性。

  • 2、动态装饰以及多层装饰时会更加复杂。

END

来源:blog.csdn.net/zwx900102/article/details/107740212

十期推荐

【181期】HashMap 面试二十一问!

【182期】SpringCloud常见面试题(2020最新版)

【183期】面试官:线上服务平均响应时间太长,怎么排查?

【184期】SQL数据库面试题以及答案(50例题)

【185期】面试官:你能说说 Synchronized实现对象锁的两种方式以及它的原理吗?

【186期】一口气说出 Synchronized 同步方法的八种使用场景

【187期】出现几率比较大的Redis面试题(含答案)

【188期】面试官:delete、truncate、drop的区别有哪些,该如何选择

【189期】delete后加 limit是个好习惯么

【190期】MQ消息中间件,面试能问写什么?


与其在网上拼命找题? 不如马上关注我们~

【193期】如何利用装饰者模式在不改变原有对象的基础上扩展功能

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/7575.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!