设计模式——装饰器模式

2020-11-06  本文已影响0人  DevilRoshan

什么是装饰器模式?

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。

实现

// 通过构造方法获取人,再通过show()方法传递出去。
type Person struct {
    name string
}

func NewPerson() *Person {
    return &Person{}
}

func NewPersonWithName(name string) *Person {
    return &Person{name: name}
}

func (this *Person) Show() {
    fmt.Println(this.name + "的装扮:")
}

// 通过构造方法传递参数给show()方法,show()方法为重写父类Person类的方法。
type Finery struct {
    *Person
    component *Person
}

func NewFinery() *Finery {
    return &Finery{}
}

func (this *Finery) Decorate(component *Person) {
    this.component = component
}

func (this *Finery) Show() {
    if this.component != nil {
        this.component.Show()
    }
}

//  具体服装类,TShirt类
type TShirts struct {
    Finery
}

func NewTShirts() *TShirts {
    return &TShirts{}
}

func (this *TShirts) Show() {
    this.Finery.Show()
    fmt.Println("T恤")
}

func TestNewFinery(t *testing.T) {
    adam := NewPersonWithName("adam")
    ts := NewTShirts()
    ts.Decorate(adam)
    ts.Show()
}

/*
=== RUN   TestNewFinery
adam的装扮:
T恤
--- PASS: TestNewFinery (0.00s)
PASS
*/

优点

缺点

使用场景

上一篇 下一篇

猜你喜欢

热点阅读