47 lines
826 B
Go
47 lines
826 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
// Product 接口
|
|
type Product interface {
|
|
Operation() string
|
|
}
|
|
|
|
// ConcreteProductA 结构体
|
|
type ConcreteProductA struct{}
|
|
|
|
func (p *ConcreteProductA) Operation() string {
|
|
return "ConcreteProductA"
|
|
}
|
|
|
|
// ConcreteProductB 结构体
|
|
type ConcreteProductB struct{}
|
|
|
|
func (p *ConcreteProductB) Operation() string {
|
|
return "ConcreteProductB"
|
|
}
|
|
|
|
// SimpleFactory 结构体
|
|
type SimpleFactory struct{}
|
|
|
|
func (f *SimpleFactory) CreateProduct(productType string) Product {
|
|
switch productType {
|
|
case "A":
|
|
return &ConcreteProductA{}
|
|
case "B":
|
|
return &ConcreteProductB{}
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
factory := &SimpleFactory{}
|
|
|
|
productA := factory.CreateProduct("A")
|
|
fmt.Println(productA.Operation())
|
|
|
|
productB := factory.CreateProduct("B")
|
|
fmt.Println(productB.Operation())
|
|
}
|