add factory

This commit is contained in:
songtianlun 2024-09-04 16:21:12 +08:00
parent 85fec93ba2
commit 360425082e
2 changed files with 69 additions and 0 deletions

View 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
````

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