工厂方法模式
golang 设计模式
https://github.com/kaysun/go_design_pattern.git
工厂方法模式,每种类型都创建对应的工厂,各个工厂均实现工厂接口,不同类型的对象通过各自的工厂方法创建。
复制代码
复制代码
输出
复制代码
版权声明: 本文为 InfoQ 作者【猴子胖胖】的原创文章。
原文链接:【http://xie.infoq.cn/article/e073729e504dd0d915ceb1a36】。文章转载请联系作者。
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()
}
输出
吃苹果
吃香蕉
吃橘子
版权声明: 本文为 InfoQ 作者【猴子胖胖】的原创文章。
原文链接:【http://xie.infoq.cn/article/e073729e504dd0d915ceb1a36】。文章转载请联系作者。
6年ios开发,1年golang开发 2020.05.09 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论