模板方法模式
发布于: 2020 年 11 月 08 日
golang 设计模式
https://github.com/kaysun/go_design_pattern.git
模板方法模式,通过父类定义模板方法,方法内调用必须由子类实现的方法,子类实现具体的方法,从而达到定制模板的目的。
golang里没有继承,只有组合形式的嵌套,所以通过嵌套接口,来达到实现模板方法的目的。
// package template 模板模式。package templateimport "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 templateimport ( "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
版权声明: 本文为 InfoQ 作者【猴子胖胖】的原创文章。
原文链接:【http://xie.infoq.cn/article/7bb984b432b1ca7ff5c942ef3】。文章转载请联系作者。
猴子胖胖
关注
6年ios开发,1年golang开发 2020.05.09 加入
还未添加个人简介
评论