写点什么

模板方法模式

用户头像
猴子胖胖
关注
发布于: 2020 年 11 月 08 日



golang 设计模式

https://github.com/kaysun/go_design_pattern.git



模板方法模式,通过父类定义模板方法,方法内调用必须由子类实现的方法,子类实现具体的方法,从而达到定制模板的目的。

golang里没有继承,只有组合形式的嵌套,所以通过嵌套接口,来达到实现模板方法的目的。



// package template 模板模式。
package template
import "fmt"
// AskForLeaveRequest 请假单接口
type AskForLeaveRequest interface {
GetName() string
ReasonForLeave() string
HowManyDaysForLeave() float32
}
// Company 公司
type Company struct {
// AskForLeaveRequest 组合AskForLeaveRequest接口对象
AskForLeaveRequest
}
// AskLeave 请假
func (company Company) AskLeave() {
fmt.Println(fmt.Sprintf("%s 因为 %s,请假 %.1f 天",
company.GetName(), company.ReasonForLeave(), company.HowManyDaysForLeave()))
}
// MyAskForLeaveRequest 我的请假单,实现AskForLeaveRequest接口
type MyAskForLeaveRequest struct {
}
// GetName 请假人姓名
func (request MyAskForLeaveRequest)GetName() string {
return "kaysun"
}
// ReasonForLeave 请假事由
func (request MyAskForLeaveRequest)ReasonForLeave() string {
return "给娃打疫苗"
}
// HowManyDaysForLeave 请假多少天
func (request MyAskForLeaveRequest)HowManyDaysForLeave() float32 {
return 0.5
}
// MyAskForLeaveRequest 我的请假单,实现AskForLeaveRequest接口
type TomAskForLeaveRequest struct {
}
// GetName 请假人姓名
func (request TomAskForLeaveRequest)GetName() string {
return "tom"
}
// ReasonForLeave 请假事由
func (request TomAskForLeaveRequest)ReasonForLeave() string {
return "回家探亲"
}
// HowManyDaysForLeave 请假多少天
func (request TomAskForLeaveRequest)HowManyDaysForLeave() float32 {
return 5
}



package template
import (
"testing"
)
func Test(t *testing.T) {
t.Run("template: my", MyAskForLeaveTemplate)
t.Run("template: tom", TomAskForLeaveTemplate)
}
func MyAskForLeaveTemplate(t *testing.T) {
request := &MyAskForLeaveRequest{}
company := Company{request}
company.AskLeave()
}
func TomAskForLeaveTemplate(t *testing.T) {
request := &TomAskForLeaveRequest{}
company := Company{request}
company.AskLeave()
}



输出

kaysun 因为 给娃打疫苗,请假 0.5 天
tom 因为 回家探亲,请假 5.0 天



发布于: 2020 年 11 月 08 日阅读数: 25
用户头像

猴子胖胖

关注

6年ios开发,1年golang开发 2020.05.09 加入

还未添加个人简介

评论

发布
暂无评论
模板方法模式