亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

概述

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

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

模板模式生活案例

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

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

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

策略模式涉及到兩個(gè)角色

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

UML

在這里插入圖片描述

總結(jié)

優(yōu)點(diǎn):

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

缺點(diǎn):

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

使用場(chǎng)景:

有多個(gè)子類共有的方法,且邏輯相同

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

示例

package main
import "fmt"
/*出行方式接口*/
type Itravel interface {
	Starting() //起點(diǎn)
	Travel()   //出行方式
	End()      //終點(diǎn)
}
//定義父類
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 //匿名字段實(shí)現(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", "坐飛機(jī)")
}
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語(yǔ)言基礎(chǔ)模板設(shè)計(jì)模式示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言模板設(shè)計(jì)模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Go語(yǔ)言單例模式詳解

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

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

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

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

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

最新評(píng)論