【设计模式】第24节:行为型模式之“模板方法模式”

一、简介

模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

模板模式有两大作用:复用和扩展。其中,复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。

二、优点

  • 代码复用
  • 统一算法框架
  • 封装不变,扩展可变

三、适用场景

  • 一次性实现算法的不变部分
  • 集中公共行,避免代码重复

四、UML类图

五、案例

有下棋和足球两种游戏,它们的游玩过程类似,都是分为初始化、玩游戏、结束游戏三步。

go 复制代码
package main

import "fmt"

type Game interface {
	InitializeGame()
	PlayGame()
	EndGame()
}

func Play(game Game) {
	game.InitializeGame()
	game.PlayGame()
	game.EndGame()
}

type Chess struct {
}

func NewChess() *Chess {
	return &Chess{}
}

func (c *Chess) InitializeGame() {
	fmt.Println("Initializing Chess Game")
}

func (c *Chess) PlayGame() {
	fmt.Println("Playing Chess Game")
}

func (c *Chess) EndGame() {
	fmt.Println("Ending Chess Game")
}

type Football struct {
}

func NewFootball() *Football {
	return &Football{}
}

func (f *Football) InitializeGame() {
	fmt.Println("Initializing Football Game")
}

func (f *Football) PlayGame() {
	fmt.Println("Playing Football Game")
}

func (f *Football) EndGame() {
	fmt.Println("Ending Football Game")
}

func main() {
	chess := NewChess()
	Play(chess)

	football := NewFootball()
	Play(football)
}
相关推荐
码匠许师傅11 小时前
【设计模式精讲】7.建造者模式(Builder)
设计模式·建造者模式
码匠许师傅12 小时前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式
workflower1 天前
人形机器人灵巧手产业链
人工智能·设计模式·机器人·云计算·无人机
Java后端的Ai之路1 天前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc
码匠许师傅2 天前
【设计模式精讲】4.单例模式(Singleton)
c++·单例模式·设计模式
雾削木2 天前
2026 编程领域热点知识速览:AI 辅助开发、设计模式实战与嵌入式高效迭代
人工智能·设计模式
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-42-访问者模式(业务实战篇)
java·spring·设计模式·访问者模式·asm·营销规则·数据结构与操作分离
AI人工智能+电脑小能手3 天前
大白话说Java设计模式-43-访问者模式(源码剖析篇)
java·设计模式·访问者模式·源码分析·elementvisitor·asm classvisitor·spring spel
Michael_lcf3 天前
Agent设计模式:思考-行动-观察循环的本质与局限
设计模式·agent设计模式·agent设计模式的本质