写点什么

工厂方法模式

用户头像
猴子胖胖
关注
发布于: 2020 年 11 月 08 日

golang 设计模式

https://github.com/kaysun/go_design_pattern.git


工厂方法模式,每种类型都创建对应的工厂,各个工厂均实现工厂接口,不同类型的对象通过各自的工厂方法创建。


// package factory 工厂方法模式package factory
import "fmt"
//AppleFactory 苹果工厂type AppleFactory struct{}
//BananaFactory 香蕉工厂type BananaFactory struct{}
//OrangeFactory 橘子工厂type OrangeFactory struct{}
// CreateFruit 苹果工厂生产苹果func (appleFactory AppleFactory) CreateFruit() Fruit { return &Apple{}}
// CreateFruit 香蕉工厂生产香蕉func (bananaFactory BananaFactory) CreateFruit() Fruit { return &Banana{}}
// CreateFruit 橘子工厂生产橘子func (orangeFactory OrangeFactory) CreateFruit() Fruit { return &Orange{}}
// Fruit 水果接口type Fruit interface { // Eat 吃水果 Eat()}
// Apple 苹果,实现Fruit接口type Apple struct{}
// Banana 香蕉,实现Fruit接口type Banana struct{}
// Orange 橘子,实现Fruit接口type Orange struct{}
// Eat 吃苹果func (apple Apple) Eat() { fmt.Println("吃苹果")}
// Eat 吃香蕉func (banana Banana) Eat() { fmt.Println("吃香蕉")}
// Eat 吃橘子func (orange Orange) Eat() { fmt.Println("吃橘子")}
复制代码


package factory
import "testing"
func Test(t *testing.T) { t.Run("factory: ", ProduceFruitAndEat)}
func ProduceFruitAndEat(t *testing.T) { appleFactory := &AppleFactory{} bananaFactory := &BananaFactory{} orangeFactory := &OrangeFactory{}
var apple, banana, orange Fruit
apple = appleFactory.CreateFruit() apple.Eat()
banana = bananaFactory.CreateFruit() banana.Eat()
orange = orangeFactory.CreateFruit() orange.Eat()}
复制代码


输出

吃苹果吃香蕉吃橘子
复制代码


发布于: 2020 年 11 月 08 日阅读数: 35
用户头像

猴子胖胖

关注

6年ios开发,1年golang开发 2020.05.09 加入

还未添加个人简介

评论

发布
暂无评论
工厂方法模式