定义
提供一个接口以创建一系列相关或相互依赖的对象,而无须指定它们具体的类。
适用范围
- 一个系统要独立于它的产品的创建、组合和表示。
- 一个系统要由多个产品系列中的一个来配置。
- 要强调一系列相关的产品对象的设计以便进行联合使用。
- 提供一个产品类库,但只想显示它们的接口而不是实现。
代码实现
package factory
import "fmt"
// 工厂模式
type Operation interface {
Write()
Read()
}
type FileOp struct {
Name string
}
func (f *FileOp) Write() {
fmt.Println("write file")
}
func (f *FileOp) Read() {
fmt.Println("read file")
}
var mOp = map[string]Operation{}
func register() {
mOp["file"] = &FileOp{}
}
func GetOp(name string) Operation {
return mOp[name]
}
测试用例
package factory
import "testing"
func TestOp(t *testing.T) {
register()
fop := GetOp("file")
fop.Write()
fop.Read()
}
输出
=== RUN TestOp
write file
read file
--- PASS: TestOp (0.00s)
PASS
总结
这就是简单的工厂的实现,类似于一个工厂,生产出来各式各样实现相同接口的物品。