工廠方法(FactoryMethod)——go實現工廠方法模式

1. 意圖

定義一個用於創建對象的接口,讓子類決定實例化哪一個類。

2. 結構

在這裏插入圖片描述

3. 4類參與者

  1. Product
    定義工廠方法所創建的方法的接口

  2. ConcreteProduct
    實現Product方法

  3. Creator
    1.聲明工廠方法,該方法返回一個Product類型的對象。或者定義一個工廠方法的缺省實現,它返回一個缺省的ConcreteProduct對象
    2.可以調用工廠方法以創建一個Product對象

  4. ConcreteCreator
    重定義工廠方法以返回一個ConcreteProduct實例

4. go代碼實現

package main

import "fmt"

// 定義接口
type Animal interface {
	Cry()
}
// 實現類1
type Cat struct {}

// 實現類2
type Dog struct {}

// 實現類1方法實現
func (Cat) Cry() {
	fmt.Println("miao")
}

// 實現類2方法實現
func (Dog) Cry() {
	fmt.Println("wang")
}

// 工廠類
type AnimalFactory struct {}

// 工廠類方法實現
func (AnimalFactory) getAnimalObj(animalType string) Animal {
	var animal Animal
	switch animalType {
	case "cat":
		animal = new(Cat)
	case "dog":
		animal = new(Dog)
	default:
		panic("no this kind animal")
	}
	return animal
}

// 測試
func main() {
	new(AnimalFactory).getAnimalObj("cat").Cry()
	new(AnimalFactory).getAnimalObj("dog").Cry()
}

[參考文檔1]《設計模式》-機械工業出版社
3.3節 FACTORY METHOD(工廠方法)——對象創建型模式
參考文檔2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章