实现一个装饰器模式 (Decorator)

推荐答案

-- -------------------- ---- -------
-- ----
----- ------ -
  ------ -
    ------ --
  -
-

-- -----
----- --------------- -
  ------------------- -
    ----------- - -------
  -

  ------ -
    ------ -------------------
  -
-

-- -----
----- ------------- ------- --------------- -
  ------ -
    ------ ------------------ - --
  -
-

----- -------------- ------- --------------- -
  ------ -
    ------ ------------------ - --
  -
-

-- ----
--- ------ - --- ---------
--------------------------- -- --- -

------ - --- ----------------------
--------------------------- -- --- -

------ - --- -----------------------
--------------------------- -- --- -

本题详细解读

装饰器模式概述

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装对象中来为原对象增加新的行为。装饰器模式的核心思想是动态地给对象添加额外的职责,而不改变其结构。

代码结构解析

  1. 基础组件 (Coffee):

    • Coffee 类是一个基础组件,它定义了最基本的 cost 方法,返回咖啡的基础价格。
  2. 装饰器基类 (CoffeeDecorator):

    • CoffeeDecorator 是一个抽象类,它持有一个 Coffee 对象的引用,并通过 cost 方法调用基础组件的 cost 方法。
  3. 具体装饰器 (MilkDecoratorSugarDecorator):

    • MilkDecoratorSugarDecorator 是具体的装饰器类,它们继承自 CoffeeDecorator,并在 cost 方法中添加了额外的价格。

使用示例

  • 首先创建一个 Coffee 对象,调用 cost 方法输出基础价格。
  • 然后使用 MilkDecorator 装饰 Coffee 对象,再次调用 cost 方法,输出增加了牛奶价格后的总价格。
  • 最后使用 SugarDecorator 装饰已经包含牛奶的 Coffee 对象,调用 cost 方法,输出增加了糖价格后的总价格。

优点

  • 灵活性: 可以在运行时动态地添加或移除功能。
  • 扩展性: 可以通过添加新的装饰器来扩展功能,而不需要修改现有代码。
  • 单一职责原则: 每个装饰器只负责一个特定的功能,符合单一职责原则。

适用场景

  • 当你需要在不修改对象结构的情况下,动态地给对象添加功能时。
  • 当你需要扩展一个类的功能,但又不想通过继承来实现时。

通过装饰器模式,你可以轻松地为对象添加新的行为,而不会影响到其他对象。

纠错
反馈