首頁 > 軟體

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

2022-04-09 19:00:34

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

整體效果如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com