golang實(shí)現(xiàn)簡單工廠、方法工廠、抽象工廠三種設(shè)計(jì)模式
1、簡單工廠:
第一步:創(chuàng)建一個(gè)文章接口,需要實(shí)現(xiàn)閱讀和寫作的功能。
type Article interface { ReadArticle() string WriteArticle(contents string) string }
第二步:創(chuàng)建 中文書 和 英文書 兩個(gè)“類”,并且分別實(shí)現(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)該需要使用什么樣的方法去實(shí)例化具體的類
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")//這樣,我實(shí)例化中文書還是英文書都可以了 fmt.Println(a.ReadArticle()) }
總體結(jié)構(gòu)如下圖:
2、方法工廠:
第一步:同上, 來一個(gè)文章接口
type Article interface { ReadArticle() string WriteArticle(contents string) string }
第二步:來兩種書。需要實(shí)例化的類
。并且實(shí)現(xiàn)接口
type ChineseArticle struct{} type EnglishArticle struct{} //實(shí)現(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)建兩個(gè)用來創(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)建一個(gè)book
,然后再創(chuàng)建一個(gè)能夠創(chuàng)建book的BookCompany
接口。
type BookCompany interface { Create() Book } type Book interface { ReadBook() string WriteBook() string }
第二步:創(chuàng)建兩book
并且實(shí)現(xiàn)它
type EnglishBook struct{} type ChineseBook struct{} //實(shí)現(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)建兩個(gè)印刷廠
type BeiJinCompany struct{} type ShanghaiCompany struct{} //一個(gè)印刷場刷英語書,一個(gè)刷中文書 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)文章
Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究
這篇文章主要為大家介紹了Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01go使用支付寶沙箱實(shí)現(xiàn)支付寶支付的操作步驟
支付寶沙箱支付是支付寶提供的一個(gè)測試環(huán)境,用于開發(fā)者在不影響真實(shí)交易的情況下進(jìn)行支付接口的開發(fā)和調(diào)試,本文給大家介紹了go使用支付寶沙箱實(shí)現(xiàn)支付寶支付的操作步驟,文中有詳細(xì)的代碼示例和圖文供大家參考,需要的朋友可以參考下2024-03-03Golang迭代如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解
這篇文章主要為大家介紹了Golang迭代之如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10使用?gomonkey?Mock?函數(shù)及方法示例詳解
在 Golang 語言中,寫單元測試的時(shí)候,不可避免的會(huì)涉及到對其他函數(shù)及方法的 Mock,即在假設(shè)其他函數(shù)及方法響應(yīng)預(yù)期結(jié)果的同時(shí),校驗(yàn)被測函數(shù)的響應(yīng)是否符合預(yù)期,這篇文章主要介紹了使用?gomonkey?Mock?函數(shù)及方法,需要的朋友可以參考下2022-06-06