设计模式-装饰者模式
2023-10-13 本文已影响0人
Hengry
装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的基础上,动态地添加功能>或责任。这种模式通常用于扩展类的功能,同时保持类的封装性。
下面是一个简单的装饰者模式的案例,假设我们有一个简单的咖啡店,需要制作不同种类的咖啡,并可以根据客户的需求添加额外的配料,如牛奶和糖。
首先,定义一个咖啡接口:
protocol Coffee {
func cost() -> Double
func description() -> String
}
然后,实现具体的咖啡类:
class SimpleCoffee: Coffee {
func cost() -> Double {
return 1.0 // 简单咖啡的价格
}
func description() -> String {
return "简单咖啡"
}
}
接下来,创建装饰者类,用于动态地添加配料:
class CoffeeDecorator: Coffee {
private let decoratedCoffee: Coffee
init(decoratedCoffee: Coffee) {
self.decoratedCoffee = decoratedCoffee
}
func cost() -> Double {
return decoratedCoffee.cost()
}
func description() -> String {
return decoratedCoffee.description()
}
}
然后,创建具体的配料装饰者,如牛奶和糖:
class MilkDecorator: CoffeeDecorator {
override func cost() -> Double {
return super.cost() + 0.5 // 加入牛奶的价格
}
override func description() -> String {
return super.description() + ", 牛奶"
}
}
class SugarDecorator: CoffeeDecorator {
override func cost() -> Double {
return super.cost() + 0.2 // 加入糖的价格
}
override func description() -> String {
return super.description() + ", 糖"
}
}
现在,你可以使用装饰者模式来制作不同种类的咖啡,并根据客户的需求添加配料:
var coffee: Coffee = SimpleCoffee()
print("咖啡描述:\(coffee.description()), 价格:$\(coffee.cost())")
coffee = MilkDecorator(decoratedCoffee: coffee)
print("咖啡描述:\(coffee.description()), 价格:$\(coffee.cost())")
coffee = SugarDecorator(decoratedCoffee: coffee)
print("咖啡描述:\(coffee.description()), 价格:$\(coffee.cost())")
通过装饰者模式,你可以灵活地组合不同种类的咖啡和配料,而不需要创建大量的子类,同时保持了代码的可扩展性和可维护性。这种模式常用于构建复杂的对象组合和装饰。