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