Golang – 常用设计Decoration Pattern
在 Golang当中,Decoration Pattern通常用于动态地给一个基础Object添加一些额外的职责,而不需要修改基础Object的代码。这种模式通过创建一个包装(Wrapper)对象来实现,在这个包装Object中可以添加新的功能或修改原始Object的行为。
代码演示:
- 定义好Coffee interface的标准接口
type Coffee interface {
Cost() int
Ingredients() string
}
2. 定义好,符合Coffee的物种,也就是Starbuck Coffee
type StarBuckCoffee struct{}
func (this *StarBuckCoffee) Cost() int {
return 10
}
func (this *StarBuckCoffee) Ingredients() string {
return "Coffee"
}
3.定义好,Coffee的添加物,只能接受Coffe的导入
type Milk struct {
Coffee
}
func (this *Milk) Cost() int {
return this.Coffee.Cost() + 2
}
func (this *Milk) Ingredients() string {
return this.Coffee.Ingredients() + " Milk"
}
4. 使用案例
func main() {
coffee := StarBuckCoffee{}
fmt.Println("Cost:", coffee.Cost(), "Ingredients:", coffee.Ingredients())
coffeeWithMilk := Milk{Coffee: &coffee}
fmt.Println("Cost:", coffeeWithMilk.Cost(), "Ingredients:", coffeeWithMilk.Ingredients())
}
输出结果:
Cost: 10 Ingredients: Coffee
Cost: 12 Ingredients: Coffee Milk
Facebook评论