add factory
This commit is contained in:
parent
85fec93ba2
commit
360425082e
23
study_go/design_pattern/1_simple_factory/README.md
Normal file
23
study_go/design_pattern/1_simple_factory/README.md
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# UML
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
classDiagram
|
||||||
|
class Product {
|
||||||
|
<<interface>>
|
||||||
|
+operation()
|
||||||
|
}
|
||||||
|
class ConcreteProductA {
|
||||||
|
+operation()
|
||||||
|
}
|
||||||
|
class ConcreteProductB {
|
||||||
|
+operation()
|
||||||
|
}
|
||||||
|
class SimpleFactory {
|
||||||
|
+createProduct(string) Product
|
||||||
|
}
|
||||||
|
Product <|.. ConcreteProductA
|
||||||
|
Product <|.. ConcreteProductB
|
||||||
|
SimpleFactory ..> Product
|
||||||
|
SimpleFactory ..> ConcreteProductA
|
||||||
|
SimpleFactory ..> ConcreteProductB
|
||||||
|
````
|
46
study_go/design_pattern/1_simple_factory/main.go
Normal file
46
study_go/design_pattern/1_simple_factory/main.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
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())
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user