抽象工厂模式
发布于: 2020 年 11 月 08 日
golang 设计模式
https://github.com/kaysun/go_design_pattern.git
抽象工厂模式,对同一类型的工厂进行抽象,抽取出工厂接口,具体的工厂实现工厂接口,具体的工厂创建具体的对象。
// package abstract_factory 抽象工厂模式package abstract_factoryimport "fmt"// FruitFacotry 水果工厂接口type FruitFacotry interface { // CreateFruit 生产水果 CreateFruit() Fruit}//AppleFactory 苹果工厂,实现FruitFacotry接口type AppleFactory struct{}//BananaFactory 香蕉工厂,实现FruitFacotry接口type BananaFactory struct{}//OrangeFactory 橘子工厂,实现FruitFacotry接口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 abstract_factoryimport "testing"func Test(t *testing.T) { t.Run("abstract_factory: ", ProduceFruitAndEat)}func ProduceFruitAndEat(t *testing.T) { var factory FruitFacotry var apple, banana, orange Fruit //创建苹果工厂,生产苹果,吃苹果 factory = &AppleFactory{} apple = factory.CreateFruit() apple.Eat() //创建香蕉工厂,生产香蕉,吃香蕉 factory = &BananaFactory{} banana = factory.CreateFruit() banana.Eat() //创建橘子工厂,生产橘子,吃橘子 factory = &OrangeFactory{} orange = factory.CreateFruit() orange.Eat()}
输出
吃苹果吃香蕉吃橘子
划线
评论
复制
发布于: 2020 年 11 月 08 日阅读数: 26
版权声明: 本文为 InfoQ 作者【猴子胖胖】的原创文章。
原文链接:【http://xie.infoq.cn/article/5207cac852b285c21a476080a】。文章转载请联系作者。
猴子胖胖
关注
6年ios开发,1年golang开发 2020.05.09 加入
还未添加个人简介
评论