设计模式

设计模式-装饰者模式

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())")

通过装饰者模式,你可以灵活地组合不同种类的咖啡和配料,而不需要创建大量的子类,同时保持了代码的可扩展性和可维护性。这种模式常用于构建复杂的对象组合和装饰。

上一篇下一篇

猜你喜欢

热点阅读