1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
* 咖啡接口 */ protocol Coffee { 价格 - returns: 价格 */ func getCost() -> Double 原料 - returns: 原料 */ func getIngredients() -> String }
class SimpleCoffee: Coffee { func getCost() -> Double { return 1.0 } func getIngredients() -> String { return "Coffee" } }
class CoffeeDecorator: Coffee { private let decoratedCoffee: Coffee private let ingredientSeparator: String = ", " required init(decoratedCoffee: Coffee) { self.decoratedCoffee = decoratedCoffee } func getCost() -> Double { return decoratedCoffee.getCost() } func getIngredients() -> String { return decoratedCoffee.getIngredients() } }
class Milk: CoffeeDecorator { required init(decoratedCoffee: Coffee) { super.init(decoratedCoffee: decoratedCoffee) } override func getCost() -> Double { return super.getCost() + 0.5 } override func getIngredients() -> String { return super.getIngredients() + ingredientSeparator + "Milk" } }
class WhipCoffee: CoffeeDecorator { required init(decoratedCoffee: Coffee) { super.init(decoratedCoffee: decoratedCoffee) } override func getCost() -> Double { return super.getCost() + 0.7 } override func getIngredients() -> String { return super.getIngredients() + ingredientSeparator + "Whip" } }
var someCoffee: Coffee = SimpleCoffee() print("Cost : \(someCoffee.getCost()); Ingredients: \(someCoffee.getIngredients())")
var milkCoffee = Milk(decoratedCoffee: someCoffee) print("Cost : \(milkCoffee.getCost()); Ingredients: \(milkCoffee.getIngredients())")
var whipCoffee = WhipCoffee(decoratedCoffee: milkCoffee) print("Cost : \(whipCoffee.getCost()); Ingredients: \(whipCoffee.getIngredients())")
|