定义一个模板方法
type (
BehaviorInterface interface {
play()
}
AbstractStruct struct {
ConcreteBehavior BehaviorInterface
}
)
// 抽象方法需要调用具体实现
func (a AbstractStruct) play() {
a.ConcreteBehavior.play()
//fmt.Println("here is AbstractStruct.Play()")
}
func (a AbstractStruct) Run() {
// 具体的方法
a.pre()
// 抽象方法
a.play()
}
// 具体方法
func (a AbstractStruct) pre() {
fmt.Println("before ")
}
定义一个实现结构体
type (
Special struct{
AbstractStruct
}
)
func (s Special) play() {
fmt.Println("here is Special.Play()")
}
使用
instance := &Special{}
instance.ConcreteBehavior = instance
instance.Run()
结语
以上只是核心部分,实际上入参添加上下文Context更好,再加上处理error的部分。
扩展:具体实例可以有多个,在Context里添加一个参数,校验通过后,映射具体的实例。