【发布时间】:2019-01-18 19:22:29
【问题描述】:
在Decorator Pattern,如果我
- 移除装饰器继承的抽象装饰器类和
- 有decorators直接继承decoratee的接口。
输出是一样的。
我的问题是为什么还要添加额外的abstractor class 来制作装饰器?
例如:
标准decorator pattern的Scala源代码在这里:https://gist.github.com/kencoba/1875983
虽然我遵循上述步骤的版本如下:
(通过删除抽象装饰器类(CoffeeDecorator 这里)并让装饰器直接继承被装饰者(Coffee 这里))
trait Coffee {
def cost: Double
def ingredients: String
}
//abstract class CoffeeDecorator(decoratedCoffee: Coffee) extends Coffee {
// val sep = ", "
//
// override def cost = decoratedCoffee.cost
// override def ingredients = decoratedCoffee.ingredients
//}
class Milk(decoratedCoffee: Coffee) extends Coffee {
override def cost = decoratedCoffee.cost + 0.5
override def ingredients = decoratedCoffee.ingredients + "," + "Milk"
}
class Whip(decoratedCoffee: Coffee) extends Coffee {
override def cost = decoratedCoffee.cost + 0.7
override def ingredients = decoratedCoffee.ingredients + "," + "Whip"
}
object DecoratorSample {... // same as the comparing source code.
【问题讨论】:
标签: java scala design-patterns decorator