设计模式概述:装饰器模式
装饰器模式是一种结构型设计模式,它允许你动态地向对象添加新的功能,而不改变其结构。这个模式通过创建一个装饰对象来包裹原始对象,增强或扩展其行为。装饰器模式提供了一种灵活的方式,以对个别对象的功能进行扩展而无需修改其他对象。
以下是装饰器模式的一些关键点:
开放-封闭原则:装饰器模式符合开放-封闭原则(对扩展开放,对修改封闭),因为你可以通过创建新的装饰器类来扩展对象的功能,而不需要更改原始类的代码。
对象而非类的功能增强:与继承不同,装饰器模式是通过组合多个对象来增强功能的,这使得功能扩展更加灵活。
多装饰器组合:你可以组合多个不同的装饰器,从而实现多种功能组合。这使得它非常适合需要多个可叠加功能的场景。
保持原始对象的接口:被装饰的对象和装饰器对象实现相同的接口,这确保了装饰对象可以替代被装饰的对象。
下面是一个Python中简单的装饰器模式示例:
class Beverage:
def cost(self):
return 0
class Coffee(Beverage):
def cost(self):
return 5
class Decorator(Beverage):
def __init__(self, beverage):
self.beverage = beverage
def cost(self):
return self.beverage.cost()
class Milk(Decorator):
def cost(self):
return self.beverage.cost() + 1
class Sugar(Decorator):
def cost(self):
return self.beverage.cost() + 0.5
# 使用装饰器模式
plain_coffee = Coffee()
print("Plain coffee cost:", plain_coffee.cost()) # 输出:5
coffee_with_milk = Milk(plain_coffee)
print("Coffee with milk cost:", coffee_with_milk.cost()) # 输出:6
coffee_with_milk_sugar = Sugar(coffee_with_milk)
print("Coffee with milk and sugar cost:", coffee_with_milk_sugar.cost()) # 输出:6.5
在这个例子中,Beverage
是一个基本接口,Coffee
是具体的饮料,而Milk
和Sugar
是装饰器,用来向Coffee
对象动态添加额外的功能或属性(在这里是额外的价格)。通过这种方式,你可以组合使用装饰器,以便在不修改原始对象的情况下,顺序地添加额外的功能。