模板方法模式(Template Method Pattern)
模板方法模式(Template Method Pattern)是一种行为型设计模式,用于定义一个算法的框架,将一些步骤延迟到子类中实现。在模板方法模式中,模板方法定义算法的框架,具体步骤则由子类实现。这种模式通过把不变的行为放在超类中,去除子类中的重复代码,提高代码复用性。
下面是用 Go 语言实现模板方法模式的示例代码:
package main
import "fmt"
// 抽象类
type AbstractClass interface {
// 模板方法
TemplateMethod()
// 具体方法
concreteMethod()
}
// 具体类1
type ConcreteClass1 struct {
AbstractClass
}
func (c *ConcreteClass1) TemplateMethod() {
fmt.Println("ConcreteClass1 Template Method")
c.concreteMethod()
}
func (c *ConcreteClass1) concreteMethod() {
fmt.Println("ConcreteClass1 Concrete Method")
}
// 具体类2
type ConcreteClass2 struct {
AbstractClass
}
func (c *ConcreteClass2) TemplateMethod() {
fmt.Println("ConcreteClass2 Template Method")
c.concreteMethod()
}
func (c *ConcreteClass2) concreteMethod() {
fmt.Println("ConcreteClass2 Concrete Method")
}
func main() {
// 使用具体类1
c1 := &ConcreteClass1{}
c1.TemplateMethod()
// 使用具体类2
c2 := &ConcreteClass2{}
c2.TemplateMethod()
}
在上面的示例代码中,我们定义了一个抽象类 AbstractClass
,它有一个模板方法 TemplateMethod
和一个具体方法 concreteMethod
。TemplateMethod
定义了算法的框架,具体步骤则由子类实现,concreteMethod
是具体的行为。
我们还定义了两个具体类 ConcreteClass1
和 ConcreteClass2
,它们继承了抽象类 AbstractClass
,并实现了 TemplateMethod
和 concreteMethod
方法。在这里,我们可以看到,具体类只需要实现自己特定的行为即可,而模板方法已经在抽象类中定义好了。
最后,我们在主函数中创建了一个具体类 1 的实例 c1
和一个具体类2的实例 c2
,并调用了它们的 TemplateMethod
方法。在这里,我们可以看到,具体类 1 和具体类 2 的 TemplateMethod
方法都调用了抽象类中的模板方法,并输出了各自的具体行为。
推荐文章: