实用 AI

可在线运行 AI 集合,涵盖 AI 文案生成、写作辅助、AI 绘图与照片修复、AI 配音、字幕生成、语音转录以及 AI 视频创作和数字人等多种 AI 服务

查看详情

装饰模式

软件设计模式
2021-05-17 14:29 · 阅读时长4分钟
小课

装饰模式主要用来动态扩展原来类的功能。对于面向对象编程,我们可以通过继承来扩展类的功能,但是有几种情况使用继承的方式却不一定好实现,比如说

  • 原来的类使用final修饰,无法通过继承扩展。
  • 需要动态扩展,对已经实例化之后的类进行扩展。
  • 功能组合扩展,多个扩展功能想要组合使用。

装饰模式和代理模式以及适配器模式在结构上很相似,但是它们的适用场景,或者说使用目的是有区别的,下面通过一个示例来看看装饰模式的简单用法。假设原本有一个接口Shape和一个实现类Rectangle用于画矩形。

加载中...

现在我们想在原来的矩形上加一个边框、内阴影、外阴影,我们可以先创建一个装饰类的基类BaseDecorator

加载中...

然后分别实现几个装饰类,BorderDecoratorInnerShadowDecoratorOuterShadowDecorator

加载中...

使用的时候可以根据需求进行组合,比如说要画一个带外阴影和边框的矩形,只需要一层层包装即可。

加载中...
总结

使用装饰模式可以实现动态、组合扩展功能,但是如果装饰类太多,使用起来也非常麻烦,而且在实际开发中可能还需要考虑多个装饰类的顺序问题。

装饰者模式设计模式decorator