欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言基礎(chǔ)模板設(shè)計模式示例詳解

 更新時間:2021年11月17日 09:12:23   作者:package main  
這篇文章主要為大家介紹了Go語言基礎(chǔ)設(shè)計模式之模板模式的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

概述

模板方法模式定義了一個算法的步驟,并允許子類別為一個或多個步驟提供其實踐方式。讓子類別在不改變算法架構(gòu)的情況下,重新定義算法中的某些步驟

確定了步驟的執(zhí)行順序,單某些步驟因環(huán)境或人等因素具體實現(xiàn)是未知的

模板模式生活案例

請客吃飯【點菜->吃東西->結(jié)賬】,每個人點菜不一樣,吃東西不一樣,結(jié)賬也不一樣從某地到某地【起點->出行方式->終點】起點和終點不一一樣,但是每個人出行方式是不一樣的

Go沒有封裝、繼承、多態(tài)這些概念,但同樣通過別的方式可以實現(xiàn)這些特性

  • 封裝:通過方法實現(xiàn)
  • 繼承:通過匿名字段實現(xiàn)
  • 多態(tài):通過接口實現(xiàn)

策略模式涉及到兩個角色

編號 角色 描述
1 抽象父類(AbstractClass) 實現(xiàn)了模板方法,定義了算法的骨架
2 具體類(ConcreteClass) 實現(xiàn)抽象類中的抽象方法,即不同的對象的具體實現(xiàn)細(xì)節(jié)

UML

在這里插入圖片描述

總結(jié)

優(yōu)點:

  • 封裝不變部分,擴(kuò)展可變部分。
  • 提取公共代碼,便于維護(hù)。
  • 行為由父類控制,子類實現(xiàn)。

缺點:

每一個不同的實現(xiàn)都需要一個子類來實現(xiàn),導(dǎo)致類的個數(shù)增加,使得系統(tǒng)更加龐大

使用場景:

有多個子類共有的方法,且邏輯相同

重要的、復(fù)雜的方法,可以考慮作為模板方法

示例

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 //匿名字段實現(xiàn)繼承
}
func NewZhangSan() *ZhangSan {
	c := new(ZhangSan)
	c.Persion = Persion{Itravel: c}
	return c
}
func (_ ZhangSan) Starting() {
	fmt.Printf("從%s出發(fā)", "北京")
}

func (_ ZhangSan) Travel() {
	fmt.Printf(" %s", "火車")
}
func (_ ZhangSan) End() {
	fmt.Printf(" %s", "到達(dá)上海")
}
//具體類:李四
type LiSi struct {
	Persion
}
func (_ LiSi) Starting() {
	fmt.Printf("從%s出發(fā)", "廣州")
}
func (_ LiSi) Travel() {
	fmt.Printf(" %s", "坐飛機")
}
func (_ LiSi) End() {
	fmt.Printf(" %s", "到達(dá)重慶")
}
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語言基礎(chǔ)模板設(shè)計模式示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語言模板設(shè)計模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang接口型函數(shù)使用小結(jié)

    Golang接口型函數(shù)使用小結(jié)

    接口函數(shù)指的是用函數(shù)實現(xiàn)接口,這樣在調(diào)用的時候就會非常簡便,這種方式適用于只有一個函數(shù)的接口,這里以迭代一個map為例,演示這一實現(xiàn)的技巧,對Golang接口型函數(shù)使用知識感興趣的朋友一起看看吧
    2022-06-06
  • 基于Golang?container/list實現(xiàn)LRU緩存

    基于Golang?container/list實現(xiàn)LRU緩存

    Least?Recently?Used?(LRU)?,即逐出最早使用的緩存,這篇文章主要為大家介紹了如何基于Golang?container/list實現(xiàn)LRU緩存,感興趣的可以了解下
    2023-08-08
  • Golang中使用Date進(jìn)行日期格式化(沿用Java風(fēng)格)

    Golang中使用Date進(jìn)行日期格式化(沿用Java風(fēng)格)

    這篇文章主要介紹了Golang中使用Date進(jìn)行日期格式化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • GOLang?IO接口與工具使用方法講解

    GOLang?IO接口與工具使用方法講解

    這篇文章主要介紹了GOLang?IO接口與工具使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實現(xiàn)

    Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實現(xiàn)

    在Go語言中,我們經(jīng)常在字符串和切片之間進(jìn)行轉(zhuǎn)換,本文就詳細(xì)的介紹一下Golang 字符串與字節(jié)數(shù)組互轉(zhuǎn)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 深入學(xué)習(xí)Golang并發(fā)編程必備利器之sync.Cond類型

    深入學(xué)習(xí)Golang并發(fā)編程必備利器之sync.Cond類型

    Go?語言的?sync?包提供了一系列同步原語,其中?sync.Cond?就是其中之一。本文將深入探討?sync.Cond?的實現(xiàn)原理和使用方法,幫助大家更好地理解和應(yīng)用?sync.Cond,需要的可以參考一下
    2023-05-05
  • Go語言類型內(nèi)嵌和結(jié)構(gòu)體內(nèi)嵌的具體使用

    Go語言類型內(nèi)嵌和結(jié)構(gòu)體內(nèi)嵌的具體使用

    本文主要介紹了Go語言類型內(nèi)嵌和結(jié)構(gòu)體內(nèi)嵌的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go語言單例模式詳解

    Go語言單例模式詳解

    本文主要介紹了Go語言單例模式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Sublime Text3安裝Go語言相關(guān)插件gosublime時搜不到gosublime的解決方法

    Sublime Text3安裝Go語言相關(guān)插件gosublime時搜不到gosublime的解決方法

    本文主要介紹了Sublime Text3安裝Go語言相關(guān)插件gosublime時搜不到gosublime的解決方法,具有一定的參考價值,感興趣的可以了解一下
    2022-01-01
  • 利用go語言編寫一個并發(fā)包

    利用go語言編寫一個并發(fā)包

    這篇文章主要為大家詳細(xì)介紹了如何利用go語言編寫一個并發(fā)包,適合大部分并發(fā)任務(wù),開箱即用,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下
    2023-10-10

最新評論