日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

golang實現簡單工廠、方法工廠、抽象工廠三種設計模式_Golang

作者:李慢慢233 ? 更新時間: 2022-06-11 編程語言

1、簡單工廠:

第一步:創建一個文章接口,需要實現閱讀和寫作的功能。

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

第二步:創建?中文書?和?英文書?兩個“類”,并且分別實現兩種方法。(注:golang種沒有類,只有組合。應賀總強調,特別說明)

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"
}

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

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())
}

總體結構如下圖:

2、方法工廠:

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

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

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

type ChineseArticle struct{}
type EnglishArticle struct{}
//實現讀寫接口
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"
}

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

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"))
}

總體結構如下:

抽象工廠

第一步:創建一個book,然后再創建一個能夠創建book的BookCompany接口。

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

第二步:創建兩book?并且實現它

type EnglishBook struct{}
type ChineseBook struct{}
//實現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 "我在創作中"
}

第三步:創建兩個印刷廠

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())
}

整體效果如下:

原文鏈接:https://www.cnblogs.com/limanman233/p/16117751.html

欄目分類
最近更新