GO设计模式——25、模板模式(行为型)

目录

模板模式(Template Pattern)

模板模式的核心角色:

优缺点

使用场景

代码实现


模板模式(Template Pattern)

       模板模式(Template Pattern)定义了一个算法的骨架,并允许子类为其中的一些步骤提供具体实现。在模板模式中,模板定义了算法的框架,具体步骤则由子类实现。这种模式通过把不变的行为放在超类中,去除子类中的重复代码,提高代码复用性。

模板模式核心角色

  • 抽象类(Abstract Class):定义一个模板方法,其中包含算法的骨架和一些抽象方法,用于延迟到子类中实现的步骤。
  • 具体类(Concrete Class):继承抽象类,实现抽象方法,完成具体步骤的实现。

优缺点

(1)优点:

  • 封装不变部分,扩展可变部分。
  • 提取公共代码,便于维护。
  • 行为由父类控制,子类实现。

(2)缺点:

  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大

使用场景

  • 有多个子类共有的方法,且逻辑相同。
  • 重要的、复杂的方法,可以考虑作为模板方法。

代码实现

package main

import "fmt"

// 咖啡店的点单系统,针对不同类型的咖啡(美式咖啡、拿铁咖啡),希望根据不同类型的咖啡来制作和提供服务。

// 抽象类
type CoffeeMaker interface {
    Prepare()
    Brew()
    Serve()
}

// 具体类:美式咖啡
type Americano struct{}

func (a *Americano) Prepare() {
    fmt.Println("准备美式咖啡的材料")
}

func (a *Americano) Brew() {
    fmt.Println("冲泡美式咖啡")
}

func (a *Americano) Serve() {
    fmt.Println("提供美式咖啡")
}

// 具体类:拿铁咖啡
type Latte struct{}

func (l *Latte) Prepare() {
    fmt.Println("准备拿铁咖啡的材料")
}

func (l *Latte) Brew() {
    fmt.Println("冲泡拿铁咖啡")
}

func (l *Latte) Serve() {
    fmt.Println("提供拿铁咖啡")
}

// 客户端代码
func main() {
    americano := &Americano{}
    americano.Prepare()
    americano.Brew()
    americano.Serve()

    latte := &Latte{}
    latte.Prepare()
    latte.Brew()
    latte.Serve()
}

你可能感兴趣的:(Go,golang,设计模式,模版模式,GO设计模式,GO)