GO设计模式14模板方法模式

Posted XY丶YX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO设计模式14模板方法模式相关的知识,希望对你有一定的参考价值。


package main

import (
	"fmt"
)

type IComputerFactory interface {
	ProduceComputer() string
	BuyAllUnits()
	Assemble() string
}

//相当于抽象类
type ComputerFactory struct {
	RealFactory IComputerFactory //包含一个真正的实现的引用
}

//在这里写“抽象类”的共同的方法,实际上调用的是具体的实现来完成的。在java中,是通过this来引用具体子类,而在此处,是通过RealFactory属性
func (factory *ComputerFactory) ProduceComputer() string {
	factory.RealFactory.BuyAllUnits()
	return factory.RealFactory.Assemble()
}

//相当于具体实现子类,匿名组合父类,然后重写在java中属于抽象的方法
type LenovoFactory struct {
	ComputerFactory
}

func (factory *LenovoFactory) BuyAllUnits() {
	fmt.Println("Lenovo 去购买了组件")
}
func (factory *LenovoFactory) Assemble() string {
	return "Lenovo computer"
}
func main() {
	fmt.Println("hello")
	factory := new(ComputerFactory)
	factory.RealFactory = new(LenovoFactory)
	fmt.Println(factory.ProduceComputer())
}

以上是关于GO设计模式14模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-模板方法模式(Go语言描述)

设计模式-模板方法模式(Go语言描述)

模板方法设计模式详解C/Java/JS/Go/Python/TS不同语言实现

14.设计模式_模板方法模式

尚硅谷设计模式学习(14)---[模板方法模式(Template Method Pattern)]

14.模板方法模式