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

Golang設計模式之工廠方法模式講解和代碼示例

 更新時間:2023年06月27日 08:56:27   作者:demo007x  
工廠方法是一種創(chuàng)建型設計模式, 解決了在不指定具體類的情況下創(chuàng)建產(chǎn)品對象的問題,本文將通過代碼示例詳細給大家介紹一下Golang工廠方法模式,感興趣的同學可以參考一下

Go 工廠方法模式講解和代碼示例

概念示例

由于 Go 中缺少類和繼承等 OOP 特性, 所以無法使用 Go 來實現(xiàn)經(jīng)典的工廠方法模式。 不過, 我們仍然能實現(xiàn)模式的基礎版本, 即簡單工廠。

在本例中, 我們將使用工廠結構體來構建多種類型的武器。

首先, 我們來創(chuàng)建一個名為 iGun的接口, 其中將定義一支槍所需具備的所有方法。 然后是實現(xiàn)了 iGun 接口的 gun槍支結構體類型。 兩種具體的槍支——ak47musket火槍 ——兩者都嵌入了槍支結構體, 且間接實現(xiàn)了所有的 i­Gun方法。

gun­Factory槍支工廠結構體將發(fā)揮工廠的作用, 即通過傳入?yún)?shù)構建所需類型的槍支。 main.go 則扮演著客戶端的角色。 其不會直接與 ak47musket進行互動, 而是依靠 gun­Factory來創(chuàng)建多種槍支的實例, 僅使用字符參數(shù)來控制生產(chǎn)。

iGun.go: 產(chǎn)品接口

package main
type iGun interface {
	setName(name string)
	setPower(power string)
	getName() string
	getPower() string
}

gun.go: 具體產(chǎn)品

package main
type Gun struct {
	name  string
	power int
}
func (g *Gun) setName(name string) {
	g.name = name
}
func (g *Gun) setPower(power int) {
	g.power = power
}
func (g *Gun) getName() string {
	return g.name
}
func (g *Gun) getPower() int {
	return g.power
}

ak47.go: 具體產(chǎn)品

package main
type Ak47 struct {
	Gun
}
func newAk47() iGun {
	return &Ak47{
		Gun: Gun{
			name:  "AK47 gun",
			power: 4,
		},
	}
}

musket.go: 具體產(chǎn)品

package main
type musket struct {
	Gun
}
func newMusket() iGun {
	return &musket{
		Gun: Gun{
			name:  "Musket gun",
			power: 1,
		},
	}
}

gunFactory.go: 工廠

package main
import "fmt"
func getGun(gunType string) (iGun, error) {
	switch gunType {
	case "ak47":
		return newAk47(), nil
	case "nusket":
		return newMusket(), nil
	default:
		return nil, fmt.Errorf("Wrong gun type passed")
	}
}

main.go: 客戶端代碼

package main
import "fmt"
func main() {
	ak47, _ := getGun("ak47")
	musket, _ := getGun("musket")
	printDetails(ak47)
	printDetails(musket)
}
func printDetails(g iGun) {
	fmt.Printf("Gun: %s", g.getName())
	fmt.Println()
	fmt.Printf("Power: %d", g.getPower())
	fmt.Println()
}

到此這篇關于Golang設計模式之工廠方法模式講解和代碼示例的文章就介紹到這了,更多相關Golang 工廠方法模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Golang中Channel的原理和使用技巧

    詳解Golang中Channel的原理和使用技巧

    Channel管道提供了一種機制,它在兩個并發(fā)執(zhí)行的協(xié)程之間進行同步,并通過傳遞與該管道元素類型相符的值來進行通信。本文主要介紹了Channel的原理和使用技巧,需要的可以參考一下
    2022-11-11
  • Golang的第一個程序-Hello?World

    Golang的第一個程序-Hello?World

    這篇文章主要介紹了第一個Go程序-Hello?World,在編寫第一個go程序之前,我們要將系統(tǒng)的環(huán)境變量配好,下面來看具體的編一過程吧,需要的小伙伴可以參考一下
    2022-01-01
  • Golang環(huán)境變量設置和查看工具go env詳解

    Golang環(huán)境變量設置和查看工具go env詳解

    go env 是 Go 工具鏈中的一個命令,用于設置和查看當前 Golang 環(huán)境的相關信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設置和查看工具go env,需要的朋友可以參考下
    2023-07-07
  • go-zero源碼閱讀之布隆過濾器實現(xiàn)代碼

    go-zero源碼閱讀之布隆過濾器實現(xiàn)代碼

    布隆過濾器可以用于檢索一個元素是否在一個集合中。它的優(yōu)點是空間效率和查詢時間都比一般的算法要好的多,缺點是有一定的誤識別率和刪除困難,這篇文章主要介紹了go-zero源碼閱讀-布隆過濾器,需要的朋友可以參考下
    2023-02-02
  • Go基礎教程系列之數(shù)據(jù)類型詳細說明

    Go基礎教程系列之數(shù)據(jù)類型詳細說明

    這篇文章主要介紹了Go基礎教程系列之數(shù)據(jù)類型詳細說明,需要的朋友可以參考下
    2022-04-04
  • go RWMutex的實現(xiàn)示例

    go RWMutex的實現(xiàn)示例

    本文主要來介紹讀寫鎖的一種Go語言的實現(xiàn)方式RWMutex,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • go語言beego框架分頁器操作及接口頻率限制示例

    go語言beego框架分頁器操作及接口頻率限制示例

    這篇文章主要為大家介紹了go語言beego框架分頁器操作使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • go?REST?API設計模式和反模式示例解析

    go?REST?API設計模式和反模式示例解析

    在這篇文章中,我們將探討一些常見的REST?API設計模式和開發(fā)者應該注意的反模式,我們還將提供Golang和Open?API?Schema的代碼片段來幫助說明這些概念,有需要的朋友可以借鑒參考下
    2023-09-09
  • go語言go?func(){select{}}()的用法

    go語言go?func(){select{}}()的用法

    本文主要介紹了go語言go?func(){select{}}()的用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • Go語言并發(fā)編程 互斥鎖詳情

    Go語言并發(fā)編程 互斥鎖詳情

    在并發(fā)編程中,多個Goroutine訪問同一塊內存資源時可能會出現(xiàn)競態(tài)條件,我們需要在臨界區(qū)中使用適當?shù)耐讲僮鱽硪员苊飧倯B(tài)條件。Go 語言中提供了很多同步工具,本文將介紹互斥鎖Mutex和讀寫鎖RWMutex的使用方法。
    2021-10-10

最新評論