装饰器模式
你有两种披萨:
- 蔬菜披萨 Veggie Mania Pizza
- 豆腐披萨 Peppy Tofu pizza
你可以设计一个披萨接口,然后让不同种类的披萨实现这个接口:
type pizza interface {
getPrice() int
}
之后,你需要为披萨提供一些配料,例如:
- 番茄配料 Tomato Topping
- 芝士配料 Cheese Topping
这时你可能会得到如下披萨:
- 蔬菜披萨
- 豆腐披萨
- 蔬菜披萨 + 番茄
- 蔬菜披萨 + 芝士
- 蔬菜披萨 + 番茄 + 芝士
- ...
实现见代码...
可以发现装饰器模式和代理模式的代码很像,确实,技术上是一样的,不过所要达到的目的不太一样。
- 帮助做你不关心的事叫代理模式;
- 拓展基础功能之上的功能,使自己的能力增强叫装饰器模式;