模板方法模式(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 和一个具体方法 concreteMethodTemplateMethod 定义了算法的框架,具体步骤则由子类实现,concreteMethod 是具体的行为。

我们还定义了两个具体类 ConcreteClass1ConcreteClass2,它们继承了抽象类 AbstractClass,并实现了 TemplateMethodconcreteMethod 方法。在这里,我们可以看到,具体类只需要实现自己特定的行为即可,而模板方法已经在抽象类中定义好了。

最后,我们在主函数中创建了一个具体类 1 的实例 c1 和一个具体类2的实例 c2,并调用了它们的 TemplateMethod 方法。在这里,我们可以看到,具体类 1 和具体类 2 的 TemplateMethod 方法都调用了抽象类中的模板方法,并输出了各自的具体行为。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~