最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言基礎模板設計模式示例詳解

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

概述

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

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

模板模式生活案例

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

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

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

策略模式涉及到兩個角色

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

UML

在這里插入圖片描述

總結

優(yōu)點:

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

缺點:

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

使用場景:

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

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

示例

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", "到達上海")
}
//具體類:李四
type LiSi struct {
	Persion
}
func (_ LiSi) Starting() {
	fmt.Printf("從%s出發(fā)", "廣州")
}
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語言模板設計模式的資料請關注腳本之家其它相關文章!

相關文章

  • go類型轉換及與C的類型轉換方式

    go類型轉換及與C的類型轉換方式

    這篇文章主要介紹了go類型轉換及與C的類型轉換方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • go語言題解LeetCode1275找出井字棋的獲勝者示例

    go語言題解LeetCode1275找出井字棋的獲勝者示例

    這篇文章主要為大家介紹了go語言題解LeetCode1275找出井字棋的獲勝者示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 在 Golang 中實現(xiàn)一個簡單的Http中間件過程詳解

    在 Golang 中實現(xiàn)一個簡單的Http中間件過程詳解

    本文在go web中簡單的實現(xiàn)了中間件的機制,這樣帶來的好處也是顯而易見的,當然社區(qū)也有一些成熟的 middleware 組件,包括 Gin 一些Web框架中也包含了 middleware 相關的功能,具體內容詳情跟隨小編一起看看吧
    2021-07-07
  • 詳解Go語言如何實現(xiàn)二叉樹遍歷

    詳解Go語言如何實現(xiàn)二叉樹遍歷

    這篇文章主要為大家詳解介紹了Go語言中如何實現(xiàn)二叉樹遍歷,文中的示例代碼講解詳細,對我們學習Go語言有一定幫助,需要的可以參考一下
    2022-04-04
  • Go語言實現(xiàn)生成樣式美觀的PDF文件

    Go語言實現(xiàn)生成樣式美觀的PDF文件

    使用?Go?語言生成樣式美觀的?PDF?文件是一個常見的需求,尤其是在報告生成、發(fā)票、合同等場景中,下面就跟隨小編一起來學習一下具體實現(xiàn)方法吧
    2025-01-01
  • golang壓縮與解壓縮文件的示例代碼

    golang壓縮與解壓縮文件的示例代碼

    這篇文章主要給大家介紹了golang壓縮與解壓縮文件,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Go語言中append函數(shù)用法分析

    Go語言中append函數(shù)用法分析

    這篇文章主要介紹了Go語言中append函數(shù)用法,對比使用append函數(shù)與不使用append函數(shù)的兩個實例,詳細分析了Go語言中append函數(shù)的功能,需要的朋友可以參考下
    2015-02-02
  • Golang巧用defer進行錯誤處理的方法

    Golang巧用defer進行錯誤處理的方法

    錯誤處理是程序的重要組成部分,有效且優(yōu)雅的處理錯誤是大多數(shù)程序員的追求,下面這篇文章主要給大家介紹了關于Golang中巧用defer進行錯誤處理的方法,文中通過示例介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • GO?CountMinSketch計數(shù)器(布隆過濾器思想的近似計數(shù)器)

    GO?CountMinSketch計數(shù)器(布隆過濾器思想的近似計數(shù)器)

    這篇文章主要介紹了GO?CountMinSketch計數(shù)器(布隆過濾器思想的近似計數(shù)器),文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Go語言單鏈表實現(xiàn)方法

    Go語言單鏈表實現(xiàn)方法

    這篇文章主要介紹了Go語言單鏈表實現(xiàn)方法,實例分析了基于Go語言的單鏈表實現(xiàn)原理與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03

最新評論

尤溪县| 沙坪坝区| 体育| 包头市| 岳西县| 泰州市| 赤城县| 井陉县| 泽州县| 固始县| 鲁甸县| 舟曲县| 广元市| 会昌县| 凤城市| 达日县| 来凤县| 乐业县| 河池市| 涡阳县| 万荣县| 如东县| 达日县| 枣庄市| 商洛市| 汝阳县| 灌南县| 普兰县| 营山县| 新巴尔虎右旗| 通山县| 科技| 南昌市| 博客| 固镇县| 隆安县| 凤凰县| 邓州市| 金华市| 夹江县| 施甸县|