第九章:装饰器模式 - 动态增强的艺术大师。

装饰器模式:动态增强的艺术大师

装饰器模式是一种结构型设计模式,允许在不改变原有对象的基础上动态地扩展其功能。这种模式通过创建一系列装饰器类来包装原始对象,从而在运行时添加新的行为。装饰器模式的核心思想是“组合优于继承”,避免了因继承导致的类爆炸问题。

装饰器模式的核心组件

装饰器模式主要由以下几个组件构成:

  • Component(抽象组件):定义原始对象的接口,可以是抽象类或接口。
  • ConcreteComponent(具体组件):实现抽象组件的接口,是被装饰的原始对象。
  • Decorator(抽象装饰器):继承或实现抽象组件,并持有对组件的引用。
  • ConcreteDecorator(具体装饰器):实现抽象装饰器的接口,负责向组件添加新的行为。
装饰器模式的实现示例

以下是一个简单的装饰器模式实现示例,模拟为咖啡添加配料的场景。

# 抽象组件
class Coffee:
    def cost(self):
        pass

# 具体组件
class SimpleCoffee(Coffee):
    def cost(self):
        return 5

# 抽象装饰器
class CoffeeDecorator(Coffee):
    def __init__(self, coffee):
        self._coffee = coffee

    def cost(self):
        return self._coffee.cost()

# 具体装饰器:牛奶
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

# 具体装饰器:糖
class SugarDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 1

# 使用示例
coffee = SimpleCoffee()
print(f"Simple coffee cost: {coffee.cost()}")

coffee_with_milk = MilkDecorator(coffee)
print(f"Coffee with milk cost: {coffee_with_milk.cost()}")

coffee_with_milk_and_sugar =
### 装饰器模式:动态增强的艺术大师

装饰器模式是一种结构型设计模式,允许在不改变原有对象的基础上动态地扩展其功能。这种模式通过创建一系列装饰器类来包装原始对象,从而在运行时添加新的行为。装饰器模式的核心思想是“组合优于继承”,避免了因继承导致的类爆炸问题。

#### 装饰器模式的核心组件

装饰器模式主要由以下几个组件构成:
- **Component(抽象组件)**:定义原始对象的接口,可以是抽象类或接口。
- **ConcreteComponent(具体组件)**:实现抽象组件的接口,是被装饰的原始对象。
- **Decorator(抽象装饰器)**:继承或实现抽象组件,并持有对组件的引用。
- **ConcreteDecorator(具体装饰器)**:实现抽象装饰器的接口,负责向组件添加新的行为。

#### 装饰器模式的实现示例

以下是一个简单的装饰器模式实现示例,模拟为咖啡添加配料的场景。

```python
# 抽象组件
class Coffee:
    def cost(self):
        pass

# 具体组件
class SimpleCoffee(Coffee):
    def cost(self):
        return 5

# 抽象装饰器
class CoffeeDecorator(Coffee):
    def __init__(self, coffee):
        self._coffee = coffee

    def cost(self):
        return self._coffee.cost()

# 具体装饰器:牛奶
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

# 具体装饰器:糖
class SugarDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 1

# 使用示例
coffee = SimpleCoffee()
print(f"Simple coffee cost: {coffee.cost()}")

coffee_with_milk = MilkDecorator(coffee)
print(f"Coffee with milk cost: {coffee_with_milk.cost()}")

coffee_with_milk_and_sugar =
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值