Go 设计模式之模板模式

模版模式 (Template Pattern) 定义一个操作中算法的骨架,而将一些步骤延迟到子类中。这种方法让子类在不改变一个算法结构的情况下,就能重新定义该算法的某些特定步骤。

简单来说,模板模式就是将一个类中能够公共使用的方法放置在抽象类中实现,将不能公共使用的方法作为抽象方法,强制子类去实现,这样就做到了将一个类作为一个模板,让开发者去填充需要填充的地方。

以下是模板模式的一个实现:

package template

import "fmt"

// 社畜接口
type CompanySlave interface {
	GoToWork()
	AtWork()
	GoOffWork()
}

type Programmer struct {

}

func (Programmer) GoToWork() {
	fmt.Println("地铁上班")
}

func (Programmer) GoOffWork() {
	fmt.Println("地铁下班")
}

func (Programmer) AtWork() {
	// 交给具体子类实现
}

func oneDay(cs CompanySlave) {
	cs.GoToWork()
	cs.AtWork()
	cs.GoOffWork()
}

type XiaoMing struct {
	Programmer
}

type XiaoHong struct {
	Programmer
}

func (* XiaoMing) AtWork() {
	fmt.Println("干到头秃")
}

func (* XiaoHong) AtWork() {
	fmt.Println("偷偷摸鱼")
}

这里来看下测试用例:

package template

import (
	"fmt"
	"testing"
)

func TestTemplate(t *testing.T) {
	fmt.Println("小红的一天")
	xiaohong := &XiaoHong{}
	oneDay(xiaohong)
	fmt.Println("=====>")
	fmt.Println("小明的一天")
	xiaoming := &XiaoMing{}
	oneDay(xiaoming)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值