工厂模式
package main
import "fmt"
// Product 是工厂模式的产品接口
type Product interface {
Use()
}
// Factory 是工厂模式的工厂接口
type Factory interface {
CreateProduct(productType string) Product
}
// ConcreteFactory 是具体的工厂实现
type ConcreteFactory struct{}
// CreateProduct 实现工厂接口,根据传入的 productType 返回不同的产品实例
func (f *ConcreteFactory) CreateProduct(productType string) Product {
switch productType {
case "A":
return &ProductA{}
case "B":
return &ProductB{}
default:
return nil
}
}
// ProductA 是具体的产品A
type ProductA struct{}
// Use 是产品A的方法
func (p *ProductA) Use() {
fmt.Println("ProductA is used")
}
// ProductB 是具体的产品B
type ProductB struct{}
// Use 是产品B的方法
func (p *ProductB) Use() {
fmt.Println("ProductB is used")
}
func main() {
factory := &ConcreteFactory{}
productA := factory.CreateProduct("A")
productA.Use()
productB := factory.CreateProduct("B")
productB.Use()
}
run 执行