diff --git a/golang_learn/data_prattern/abstract_factory/说明.md b/golang_learn/data_prattern/abstract_factory/说明.md new file mode 100644 index 0000000..d76b5b3 --- /dev/null +++ b/golang_learn/data_prattern/abstract_factory/说明.md @@ -0,0 +1,52 @@ + +```go +package abstract_factory + +import "fmt" + +type Lunch interface { + Cook() +} + +type Rise struct { +} + +func (r *Rise) Cook() { + fmt.Println("这是 测试1111。") +} + +type Tomato struct { +} + +func (t *Tomato) Cook() { + fmt.Println("这是 测试22222。") +} + +type LunchFactory interface { + CreateFood() Lunch + CreateVegetable() Lunch +} + +type SimpleLunchFactory struct { +} + +func NewSimpleLunchFactory() LunchFactory { + return &SimpleLunchFactory{} +} + +func (s *SimpleLunchFactory) CreateFood() Lunch { + return &Rise{} +} + +func (s *SimpleLunchFactory) CreateVegetable() Lunch { + return &Tomato{} +} + +``` +* 实际抽象工厂是对工程的工厂函数的再次接口抽象 + +* `type Lunch interface { Cook() }` 声明接口,声明`type Rise struct {}` 和 `type Tomato struct {}` 结构体,通过结构体声明接口函数,使得实现接口,从而实现多态。 + +* `type LunchFactory interface { CreateFood() Lunch; CreateVegetable() Lunch }` 声明一个接口,接口中存在不同函数,用于返回不同对象,是对 原 *工厂模式* 升级,使 + +* 通过工厂函数,通过调用不同的接口函数,调用不同接口实现,完成(接口)多态调用。而工厂函数返回实际对象,从而使用实际对象,调用接口具体实现。 \ No newline at end of file diff --git a/golang_learn/data_prattern/factory/说明.md b/golang_learn/data_prattern/factory/说明.md new file mode 100644 index 0000000..2ee9d13 --- /dev/null +++ b/golang_learn/data_prattern/factory/说明.md @@ -0,0 +1,40 @@ + +```go +package factory + +import ( + "fmt" +) + +type Restaurant interface { + GetFood() +} + +type Aa struct { +} + +type Bb struct { +} + +func (a *Aa) GetFood() { + fmt.Println("Aa ... 测试工厂生产, ", &a) +} + +func (b *Bb) GetFood() { + fmt.Println("Bb ... 测试工厂生产, ", &b) +} + +func NewRestaurant(name string) Restaurant { + switch name { + case "Aa": + return &Aa{} + case "Bb": + return &Bb{} + } + return nil +} +``` + +* `type Restaurant interface { GetFood() }` 声明接口,声明`type Aa struct {}` 和 `type Bb struct {}` 结构体,通过结构体声明接口函数,使得实现接口,从而实现多态。 + +* 通过工厂函数,通过不同参数,调用不同接口实现,完成(接口)多态调用。而工厂函数返回实际对象,从而使用实际对象,调用接口具体实现。 \ No newline at end of file