Golang设计模式——08模板模式

模板模式

优点

  1. 在方法中定义一套处理事务的通用逻辑(TemplateMethod),某些步骤交由子类实现。主要作用还是代码复用。
  2. 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供具体实现、
  3. 在一个方法中定义一个算法的骨架,并将一些具体步骤延迟到子类中实现。
  4. 模板模式使得子类可以在不改变算法结构的基础上,重新具体定义算法中的某些步骤。
  5. 简而言之,完成一件事情,有固定的数个步骤,但是会有步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。固定不变的步骤可以抽取到父类中,需要变化的步骤定义为抽象方法由子类实现。
  6. 提高复用性,提高可扩展性,符合开闭原则

缺点

  1. 类数目增加
  2. 继承的缺点,如果父类添加了的新的抽象方法,所有子类都要修改

场景

  1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现
  2. 各子类中公共的行为被提取出来并集中到一个公共父类,从而避免代码重复

代码

在这里插入图片描述

package Template

import "fmt"

type WorkInterface interface {
	GetUp()
	Work()
	Sleep()
}
type Worker struct {
	WorkInterface
}

func NewWorker(w WorkInterface) *Worker {
	return &Worker{WorkInterface: w}
}

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

type Coder struct {
}

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

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

func (c *Coder) Sleep() {
	fmt.Println("Coder Sleep ")
}
package Template

import "testing"

func TestWorker_Daily(t *testing.T) {
	worker:=NewWorker(&Coder{})
	worker.Daily()
}

其他设计模式

设计模式Git源代码
00简单工厂模式
01工厂方法模式
02抽象工厂模式
03外观模式
04建造者模式
05桥接模式
06命令模式
07迭代器模式
08模板模式
09访问者模式
10备忘录模式
11责任链模式
12中介模式
13原型模式
14状态模式
15策略模式
16享元模式
17组合模式
18解释器模式
19单例模式
20适配器模式
21代理模式
22装饰器模式
23观察者模式

posted @ 2021-09-24 19:46  cheems~  阅读(94)  评论(0编辑  收藏  举报