广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言基础模板设计模式示例详解
  • 900
分享到

Go语言基础模板设计模式示例详解

2024-04-02 19:04:59 900人浏览 薄情痞子
摘要

目录概述模板模式生活案例策略模式涉及到两个角色UML 总结示例概述 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重

概述

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤

确定了步骤的执行顺序,单某些步骤因环境或人等因素具体实现是未知的

模板模式生活案例

请客吃饭【点菜->吃东西->结账】,每个人点菜不一样,吃东西不一样,结账也不一样从某地到某地【起点->出行方式->终点】起点和终点不一一样,但是每个人出行方式是不一样的

Go没有封装、继承、多态这些概念,但同样通过别的方式可以实现这些特性

  • 封装:通过方法实现
  • 继承:通过匿名字段实现
  • 多态:通过接口实现

策略模式涉及到两个角色

编号 角色 描述
1 抽象父类(AbstractClass) 实现了模板方法,定义了算法的骨架
2 具体类(ConcreteClass) 实现抽象类中的抽象方法,即不同的对象的具体实现细节

UML

在这里插入图片描述

总结

优点:

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

缺点:

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

使用场景:

有多个子类共有的方法,且逻辑相同

重要的、复杂的方法,可以考虑作为模板方法

示例


package main
import "fmt"

type Itravel interface {
	Starting() //起点
	Travel()   //出行方式
	End()      //终点
}
//定义父类
type Persion struct {
	Name    string //姓名
	Itravel Itravel  //出行方式接口
}
func (persion *Persion) SetName(name string) {
	persion.Name = name
}
func (persion Persion) Starting() {
	persion.Itravel.Starting()
}
func (persion Persion) Travel() {
	persion.Itravel.Travel()
}
func (persion Persion) End() {
	persion.Itravel.End()
}
//算法骨架
func (persion Persion) Start() {
	if persion.Itravel == nil {
		fmt.Println("Itravel is nil")
		return
	}
	fmt.Printf("%s", persion.Name)	
	persion.Starting()
	persion.Travel()
	persion.End()
	fmt.Println("\n")
}
//具体类:张三
type ZhangSan struct {
	Persion //匿名字段实现继承
}
func NewZhangSan() *ZhangSan {
	c := new(ZhangSan)
	c.Persion = Persion{Itravel: c}
	return c
}
func (_ ZhangSan) Starting() {
	fmt.Printf("从%s出发", "北京")
}

func (_ ZhangSan) Travel() {
	fmt.Printf(" %s", "火车")
}
func (_ ZhangSan) End() {
	fmt.Printf(" %s", "到达上海")
}
//具体类:李四
type LiSi struct {
	Persion
}
func (_ LiSi) Starting() {
	fmt.Printf("从%s出发", "广州")
}
func (_ LiSi) Travel() {
	fmt.Printf(" %s", "坐飞机")
}
func (_ LiSi) End() {
	fmt.Printf(" %s", "到达重庆")
}
func main() {
	//张三
	zhangsan := NewZhangSan()
	zhangsan.SetName("张三")
	zhangsan.Start()
	persion := &Persion{}
	persion.SetName("张三")
	persion.Itravel = ZhangSan{}
	persion.Start()
	//李四
	persion.SetName("李四")
	persion.Itravel = &LiSi{}
	persion.Start()
	lisi := LiSi{}
	lisi.Itravel = lisi
	lisi.SetName("李四")
	lisi.Start()
}

以上就是Go语言基础模板设计模式示例详解的详细内容,更多关于Go语言模板设计模式的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言基础模板设计模式示例详解

本文链接: https://www.lsjlt.com/news/157503.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言基础模板设计模式示例详解
    目录概述模板模式生活案例策略模式涉及到两个角色UML 总结示例概述 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重...
    99+
    2022-11-12
  • Go语言基础设计模式之策略模式示例详解
    目录概述针对同一类型问题的多种处理方式一、不使用策略模式二、策略模式UML 总结示例 概述 定义一系列算法,将每个算法封装起来。并让它们能够相互替换。策略模式让算法独立于使用它的客户...
    99+
    2022-11-12
  • 详解Go语言设计模式之单例模式
    目录单例模式的概念单例模式结构单例模式的使用场景单例模式例子:特殊的计数器第一个单元测试单例模式实现单例模式优缺点单例模式的概念 单例模式很容易记住。就像名称一样,它只能提供对象的单...
    99+
    2022-11-11
  • Go语言单例模式示例详解
    目录简单单例模式加锁的单例模式双check 的单例模式sync.Once 的单例模式简单单例模式 单例模式是创建类型的模式,它是为了保证执行期间内只有一个实例。使用 Golang 指...
    99+
    2022-11-11
  • Go语言基础反射示例详解
    目录概述语法一、基本操作二、修改目标对象三、动态调用方法总结示例 概述 在程序运行期对程序动态的进行访问和修改 reflect godoc: https://golang.org/p...
    99+
    2022-11-12
  • Go语言单例模式详解
    目录什么是单例模式Go中实现单例模式的方式方法一: 懒汉式方法二:饿汉式方法三:双重检查锁定示例总结单例模式是一种常见的设计模式,它在系统中仅允许创建一个实例来控制对某些资源的访问。...
    99+
    2023-03-23
    Go语言单例模式
  • Go语言字符串基础示例详解
    目录包含Contains(s,substr string) boolContainsAny(s, chars string) bool统计Count(s, substr string...
    99+
    2022-11-12
  • Go语言基础go接口用法示例详解
    目录概述语法定义接口实现接口空接口接口的组合总结 概述 Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量。 语法 定义接口 type [接口名] inte...
    99+
    2022-11-12
  • Go语言基础map用法及示例详解
    目录概述语法声明和初始化读取删除遍历总结示例 概述 map是基于key-value键值对的无序的集合 Go语言中的map是引用类型 必须初始化才能使用。 ...
    99+
    2022-11-12
  • go语言http模型reactor示例详解
    目录示例initListenerserveactivateEventLoops前面说了go自带的原生netpoll模型,大致的流程就是每一个新的连接都会开启一个goroutine去处...
    99+
    2023-01-04
    go http模型reactor go reactor模型 go reactor
  • Java设计模式之单例模式示例详解
    目录0.概述1.饿汉式1.1 饿汉式单例实现1.2 破坏单例的几种情况1.3 预防单例的破坏2.枚举饿汉式2.1 枚举单例实现2.2 破坏单例3.懒汉式4.双检锁懒汉式5.内部类懒汉...
    99+
    2022-11-12
  • 一文详解Go语言中的Option设计模式
    关于什么是设计模式,笔者在这里就不做过多的解释。大家自行百度谷歌就好。下面我们聊聊Option设计模式,这个单词翻译过来就是选项的意思。 它一般都是用在初始化数据的时候使用。 typ...
    99+
    2023-05-19
    Go Option设计模式 Go 设计模式 Go Option
  • Go语言基础go install命令使用示例详解
    目录go install一、使用二、包名和目录名的关系三、注意 go install 编译并安装代码包,对于库,会生成目标库文件,并且放置到GOPATH/pgk目录下。 对于可执文件...
    99+
    2022-11-12
  • Go语言基础go fmt命令使用示例详解
    go fmt 命令主要是用来帮你格式化所写好的代码文件【很多第三方集成软件都是使用了go fmt命令】 一、使用: go fmt <文件名>.go 使用go fmt命令...
    99+
    2022-11-12
  • Go语言基础学习之map的示例详解
    目录Mapmap定义map基本使用判断某个键是否存在map的遍历使用delete()函数删除键值对按照指定顺序遍历map元素为map类型的切片值为切片类型的mapMap实现原理什么是...
    99+
    2023-05-14
    Golang map原理 Golang map实现 Golang map
  • Go语言基础数组用法及示例详解
    目录概述语法注意示例 概述 固定长度,数组声明后长度便不能再修改 只能存储一种特定类型元素的序列 语法 编号...
    99+
    2022-11-12
  • Go语言基础go build命令用法及示例详解
    目录go build一个Go项目在GOPATH下,会有如下三个目录 使用:注意: go build 1. 用于测试编译多个包或一个main包 2. build命令编译包丢弃非main...
    99+
    2022-11-12
  • Go语言基础go doc命令用法及示例详解
    目录go doc一、使用go doc命令在终端查看go doc packagego doc package/subpackagego doc package function二、使用...
    99+
    2022-11-12
  • Go语言基础函数基本用法及示例详解
    目录概述语法函数定义一.函数参数无参数无返回有参数有返回函数值传递函数引用传递可变参数列表 无默认参数函数作为参数二、返回值多个返回值跳过返回值匿名函数匿名函数可以赋值给一个变量为函...
    99+
    2022-11-12
  • Java设计模式之享元模式示例详解
    目录定义原理类图案例需求方案:享元模式分析总结定义 享元模式(FlyWeight Pattern),也叫蝇量模式,运用共享技术,有效的支持大量细粒度的对象,享元模式就是池技术的重要实...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作