美文网首页
模板方法模式

模板方法模式

作者: 小幸运Q | 来源:发表于2021-02-26 09:12 被阅读0次

https://blog.csdn.net/qibin0506/article/details/51749759

  • 部分方法子类继承父类共享,其他用接口交给子类实现

设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。

取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。

image.png

SetName是各类共享的初始化方法,Out()也是各类共享但是是所有子类共享的抽象步骤合集。interface作为子类自由发挥的部分作为父类成员指向子类,通过 接口.BeforeOut() 在父类指针中调用子类的自由发挥方法。

image.png
package main

import "fmt"

type IPerson interface {
    SetName(name string)
    BeforeOut()
    Out()
}

type Person struct {
    Specific IPerson
    name     string
}

func (this *Person) SetName(name string) {
    this.name = name
}

func (this *Person) Out() {
    this.BeforeOut()
    fmt.Println(this.name + " go out...")
}

func (this *Person) BeforeOut() {
    if this.Specific == nil {
        return
    }

    this.Specific.BeforeOut()
}

type Boy struct {
    Person
}

func (_ *Boy) BeforeOut() {
    fmt.Println("get up..")
}

type Girl struct {
    Person
}

func (_ *Girl) BeforeOut() {
    fmt.Println("dress up..")
}

func main() {
    var p *Person = &Person{}

    p.Specific = &Boy{}
    p.SetName("Boy")
    p.Out()

    p.Specific = &Girl{}
    p.SetName("Girl")
    p.Out()
}

相关文章

网友评论

      本文标题:模板方法模式

      本文链接:https://www.haomeiwen.com/subject/sficfltx.html