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

golang實現(xiàn)簡單工廠、方法工廠、抽象工廠三種設(shè)計模式

 更新時間:2022年04月09日 14:53:28   作者:李慢慢233  
這篇文章介紹了golang實現(xiàn)簡單工廠、方法工廠、抽象工廠三種設(shè)計模式的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、簡單工廠:

第一步:創(chuàng)建一個文章接口,需要實現(xiàn)閱讀和寫作的功能。

type Article interface {
	ReadArticle() string
	WriteArticle(contents string) string
}

第二步:創(chuàng)建 中文書 和 英文書 兩個“類”,并且分別實現(xiàn)兩種方法。(注:golang種沒有類,只有組合。應(yīng)賀總強(qiáng)調(diào),特別說明)

type ChineseArticle struct{}
type EnglishArticle struct{}

func (c *ChineseArticle) ReadArticle() string {
	return "這是中文字符"
}
func (c *EnglishArticle) ReadArticle() string {
	return "this's English chars"
}
func (c *ChineseArticle) WriteArticle(contents string) string {
	return "寫入了文章"
}
func (c *EnglishArticle) WriteArticle(contents string) string {
	return "wirted words"
}

第三步:使用斷言方式分配不同的參數(shù),應(yīng)該需要使用什么樣的方法去實例化具體的類

func SFactory(lan string) (art Article) {
	switch lan {
	case "Chinese":
		art = &ChineseArticle{}
	case "English":
		art = &EnglishArticle{}
	default:
		art = &ChineseArticle{}
	}
	return art
}

第四步:使用

func main() {
	a := SFactory("Chinese")//這樣,我實例化中文書還是英文書都可以了
	fmt.Println(a.ReadArticle())
}

總體結(jié)構(gòu)如下圖:

2、方法工廠:

第一步:同上, 來一個文章接口

type Article interface {
	ReadArticle() string
	WriteArticle(contents string) string
}

第二步:來兩種書。需要實例化的類。并且實現(xiàn)接口

type ChineseArticle struct{}
type EnglishArticle struct{}
//實現(xiàn)讀寫接口
func (c *ChineseArticle) ReadArticle() string {
	return "讀書了"
}
func (c *EnglishArticle) ReadArticle() string {
	return "reading books"
}
func (c *ChineseArticle) WriteArticle(contents string) string {
	return "寫書了"
}
func (c *EnglishArticle) WriteArticle(contents string) string {
	return "wirting books"
}

第三步:創(chuàng)建兩個用來創(chuàng)建“類”的“類”,以及其方法

type CreateEnglish struct{}
type CreateChinese struct{}
//方法工廠的核心。
func (cdb *CreateEnglish) CreateArticle() (len *EnglishArticle, err error) {
	len = &EnglishArticle{}
	return len, nil
}
func (cdb *CreateChinese) CreateArticle() (len *ChineseArticle, err error) {
	len = &ChineseArticle{}
	return len, nil
}

第四步:使用

func main() {
	a := &CreateChinese{}
	art, _ := a.CreateArticle()
	fmt.Println(art.WriteArticle("123"))
}

總體結(jié)構(gòu)如下:

抽象工廠

第一步:創(chuàng)建一個book,然后再創(chuàng)建一個能夠創(chuàng)建book的BookCompany接口。

type BookCompany interface {
	Create() Book
}
type Book interface {
	ReadBook() string
	WriteBook() string
}

第二步:創(chuàng)建兩book 并且實現(xiàn)它

type EnglishBook struct{}
type ChineseBook struct{}
//實現(xiàn)book的功能
func (c *EnglishBook) ReadBook() string {
	return "reading a english book"
}
func (c *ChineseBook) ReadBook() string {
	return "讀中文書"
}
func (c *EnglishBook) WriteBook() string {
	return "i'am writing"
}
func (c *ChineseBook) WriteBook() string {
	return "我在創(chuàng)作中"
}

第三步:創(chuàng)建兩個印刷廠

type BeiJinCompany struct{}
type ShanghaiCompany struct{}
//一個印刷場刷英語書,一個刷中文書
func (c *BeiJinCompany) Create() Book {
	return &EnglishBook{}
}
func (c *ShanghaiCompany) Create() Book {
	return &ChineseBook{}
}

第四步:用起來

func main() {
	var f BookCompany
	f = new(BeiJinCompany)
	book := f.Create()
	fmt.Println(book.ReadBook())
}

整體效果如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go log庫的使用示例詳解

    Go log庫的使用示例詳解

    Go語言內(nèi)置的log庫提供了基本的日志記錄功能,支持日志的格式化輸出、設(shè)置日志前綴、配置輸出位置等,可以通過標(biāo)準(zhǔn)logger或創(chuàng)建新的Logger對象來使用,log庫簡單易用,但功能有限,可能需要配合第三方日志庫如logrus、zap等來滿足復(fù)雜需求
    2024-09-09
  • SpringEvent優(yōu)雅解耦時連續(xù)兩個bug的解決方案

    SpringEvent優(yōu)雅解耦時連續(xù)兩個bug的解決方案

    這篇文章主要為大家介紹了SpringEvent優(yōu)雅解耦時連續(xù)兩個bug的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 淺析go中的map數(shù)據(jù)結(jié)構(gòu)字典

    淺析go中的map數(shù)據(jù)結(jié)構(gòu)字典

    golang中的map是一種數(shù)據(jù)類型,將鍵與值綁定到一起,底層是用哈希表實現(xiàn)的,可以快速的通過鍵找到對應(yīng)的值。這篇文章主要介紹了go中的數(shù)據(jù)結(jié)構(gòu)字典-map,需要的朋友可以參考下
    2019-11-11
  • 通過案例簡單聊聊為什么說Go中的字符串是不能被修改的

    通過案例簡單聊聊為什么說Go中的字符串是不能被修改的

    在接觸Go這么語言,可能你經(jīng)常會聽到這樣一句話,對于字符串不能修改,可能你很納悶,日常開發(fā)中我們對字符串進(jìn)行修改也是很正常的,為什么又說Go中的字符串不能進(jìn)行修改呢,本文就來通過實際案例給大家演示,為什么Go中的字符串不能進(jìn)行修改
    2023-07-07
  • Golang time.Sleep()用法及示例講解

    Golang time.Sleep()用法及示例講解

    Go語言中的Sleep()函數(shù)用于在至少規(guī)定的持續(xù)時間d內(nèi)停止最新的go-routine,這篇文章主要介紹了Golang time.Sleep()用法及示例講解,需要的朋友可以參考下
    2023-02-02
  • 在ubuntu下安裝go開發(fā)環(huán)境的全過程

    在ubuntu下安裝go開發(fā)環(huán)境的全過程

    Go語言是谷歌公司開發(fā)的編程語言,雖然安裝和配置go很簡單,但是很多初學(xué)者在第一次安裝go環(huán)境時會遇到各種坑,下面這篇文章主要給大家介紹了關(guān)于在ubuntu下安裝go開發(fā)環(huán)境的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • GoZero實現(xiàn)數(shù)據(jù)庫MySQL單例模式連接的簡單示例

    GoZero實現(xiàn)數(shù)據(jù)庫MySQL單例模式連接的簡單示例

    在 GoZero 框架中實現(xiàn)數(shù)據(jù)庫的單例連接可以通過以下步驟來完成,GoZero 使用 gorm 作為默認(rèn)的數(shù)據(jù)庫操作框架,接下來我會展示一個簡單的單例模式實現(xiàn),需要的朋友可以參考下
    2025-02-02
  • GoLang的sync.WaitGroup與sync.Once簡單使用講解

    GoLang的sync.WaitGroup與sync.Once簡單使用講解

    sync.WaitGroup類型,它比通道更加適合實現(xiàn)這種一對多的goroutine協(xié)作流程。WaitGroup是開箱即用的,也是并發(fā)安全的。同時,與之前提到的同步工具一樣,它一旦被真正的使用就不能被復(fù)制了
    2023-01-01
  • Golang應(yīng)用程序性能優(yōu)化技巧分享

    Golang應(yīng)用程序性能優(yōu)化技巧分享

    隨著科技的進(jìn)步,人人都想要快速的應(yīng)用,這就需要優(yōu)化您的應(yīng)用程序性能。本文為大家整理了一些Golang應(yīng)用程序性能優(yōu)化的技巧,希望對大家有所幫助
    2023-04-04
  • Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放

    Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放

    這篇文章主要為大家介紹了Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04

最新評論

连山| 正镶白旗| 普安县| 白水县| 镇原县| 惠州市| 额尔古纳市| 长治县| 周至县| 哈巴河县| 万安县| 修武县| 黑山县| 长乐市| 岳阳县| 长岭县| 伽师县| 桓台县| 德清县| 阳西县| 克什克腾旗| 徐汇区| 施秉县| 丰县| 威宁| 泗阳县| 沙坪坝区| 桐乡市| 鹿邑县| 潞西市| 扶余县| 姜堰市| 邹城市| 镇雄县| 乌苏市| 吉林市| 铜陵市| 连山| 皋兰县| 佛学| 高碑店市|