package main
import ( “fmt” )
// 定義接口 type Product interface { Use() }
// 定義具體產品結構體 type ConcreteProductA struct{}
func (p *ConcreteProductA) Use() { fmt.Println(“使用具體產品A”) }
type ConcreteProductB struct{}
func (p *ConcreteProductB) Use() { fmt.Println(“使用具體產品B”) }
// 定義工廠結構體 type Factory struct{}
// 工廠方法,根據參數創建不同的產品 func (f *Factory) CreateProduct(productType string) Product { switch productType { case “A”: return &ConcreteProductA{} case “B”: return &ConcreteProductB{} default: return nil } }
func main() { // 創建工廠 factory := &Factory{}
// 使用工廠創建產品A
productA := factory.CreateProduct("A")
productA.Use()
// 使用工廠創建產品B
productB := factory.CreateProduct("B")
productB.Use()
}
在上面的代碼中,定義了一個`Product`接口,包含一個`Use`方法。然后定義了兩個具體的產品結構體,`ConcreteProductA`和`ConcreteProductB`,它們都實現了`Product`接口的`Use`方法。
接著定義了一個`Factory`工廠結構體,它有一個`CreateProduct`方法,根據傳入的參數類型,創建不同的產品并返回。
在`main`函數中,首先創建了一個工廠對象`factory`,然后用工廠的`CreateProduct`方法分別創建了產品A和產品B,并調用它們的`Use`方法。