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()
}

相关推荐

  1. GO设计模式——25模板模式行为

    2023-12-22 17:30:01       37 阅读
  2. GO设计模式——22、状态模式行为

    2023-12-22 17:30:01       38 阅读
  3. GO设计模式——24、策略模式行为

    2023-12-22 17:30:01       41 阅读
  4. GO设计模式——21、观察者模式行为

    2023-12-22 17:30:01       31 阅读
  5. GO设计模式——20、备忘录模式行为

    2023-12-22 17:30:01       43 阅读
  6. 行为设计模式模板模式

    2023-12-22 17:30:01       30 阅读
  7. 笨蛋学设计模式行为模式-状态模式20

    2023-12-22 17:30:01       32 阅读
  8. 笨蛋学设计模式行为模式-备忘录模式22

    2023-12-22 17:30:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 17:30:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 17:30:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 17:30:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 17:30:01       18 阅读

热门阅读

  1. ThreadLocal和Synchronized的用法和区别

    2023-12-22 17:30:01       45 阅读
  2. 6.1 指针的认识

    2023-12-22 17:30:01       38 阅读
  3. SQL server 数据库 sql常用语句

    2023-12-22 17:30:01       44 阅读
  4. 基于SpringBoot的体育馆使用预约管理系统

    2023-12-22 17:30:01       49 阅读
  5. Zookeeper 集群搭建过程中常见错误

    2023-12-22 17:30:01       26 阅读
  6. DeamonSet详解

    2023-12-22 17:30:01       31 阅读
  7. vue介绍以及基本指令

    2023-12-22 17:30:01       30 阅读
  8. LeetCode239. Sliding Window Maximum

    2023-12-22 17:30:01       33 阅读