美文网首页
设计模式——模板方法模式

设计模式——模板方法模式

作者: DevilRoshan | 来源:发表于2020-10-30 23:57 被阅读0次

什么是模板方法模式?

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

实现

// 抽象打工人
type WorkInterfact interface {
    // 起床
    GetUp()
    // 工作
    Work()
    // 睡觉
    Sleep()
}

type Worker struct {
    WorkInterfact
}

func NewWorker(w WorkInterfact) *Worker {
    return &Worker{w}
}

func (this *Worker)Daily() {
    this.GetUp()
    this.Work()
    this.Sleep()
}

// 具体打工人
type Coder struct {

}

func NewCoder() *Coder  {
    return &Coder{}
}

func (this *Coder)GetUp() {
    fmt.Println("Coder GetUp")
}

func (this *Coder)Work() {
    fmt.Println("Coder Work")
}

func (this *Coder)Sleep() {
    fmt.Println("Coder Sleep")
}
func TestNewWorker(t *testing.T) {
    worker := NewWorker(NewCoder())
    worker.Daily()
}
// === RUN   TestNewWorker
// Coder GetUp
// Coder Work
// Coder Sleep
// --- PASS: TestNewWorker (0.00s)
// PASS

优点

  • 封装不变部分,扩展可变部分;
  • 提取公共部分代码,便于维护;
  • 行为由父类控制,子类实现。

缺点

  • 每一个不同的实现都需要一个子类实现,导致类的个数增加,使得系统更加庞大。

使用场景

  • 有多个子类共有的方法,且逻辑相同;
  • 重要的、复杂的方法,可以考虑作为模板方法;
  • 重构时,模板方法模式是一个经常使用到的模式,把相同的代码抽取到父类中,通过钩子函数约束其行为。

相关文章

网友评论

      本文标题:设计模式——模板方法模式

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