Go语言实现装饰者模式

简介

装饰着模式是这样的一种模式,即在原有类的基础上进行装饰,然后添加新的功能模式,比如一家咖啡连锁店卖咖啡,可能需要按照顾客的要求进行个性化配置,需要添加多种原料并计算价格。

类图

我们构造的类图如下所示:
装饰器模型
这里是个简单的装饰器模型,利用组合和实现的联系,以要添加的原料作为主对象完成对深色烘培咖啡的加料和价格的计算,其中摩卡和牛奶对象被称为装饰者。

代码实现

package main

import "fmt"

type component interface {
        getdescription()
        cost() float64
}

type DarkRoast struct {
}
package main

import "fmt"

type component interface {
        getdescription()
        cost() float64
}

type DarkRoast struct {
}

func (this * DarkRoast)getdescription() {
        fmt.Printf("DarkRoast")
}

func (this * DarkRoast)cost() float64 {
        return 1.9
}

type Mocha struct {
        beverage component
}

func (this * Mocha)getdescription() {
        fmt.Printf("Mocha + ")
        this.beverage.getdescription()
}

func (this * Mocha)cost() float64 {
        return 0.5 + this.beverage.cost()
}


type Milk struct {
        beverage component
}

func (this * Milk)getdescription() {
        fmt.Printf("Milk + ")
        this.beverage.getdescription()
}

func (this * Milk)cost() float64 {
        return 0.5 + this.beverage.cost()
}

func main() {
        beverage := new (DarkRoast)
        beverage2 := new(Mocha)
        beverage2.beverage = beverage
        beverage3 := new(Milk)
        beverage3.beverage = beverage2
        beverage3.getdescription()
        fmt.Printf(" $%f\n",beverage3.cost())
}

运行结果如下所示:

Milk + Mocha + DarkRoast $2.900000

总结

优点:装饰者模式能够动态的将责任附加到对象上。想要扩展功能,装饰者有别于继承的另一种选择。
缺点:装饰者会导致设计中出现许多小对象,如果过度使用,会让程序变的复杂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值