go实现工厂模式(简易版)

55 阅读1分钟

定义

提供一个接口以创建一系列相关或相互依赖的对象,而无须指定它们具体的类。

适用范围

  • 一个系统要独立于它的产品的创建、组合和表示。
  • 一个系统要由多个产品系列中的一个来配置。
  • 要强调一系列相关的产品对象的设计以便进行联合使用。
  • 提供一个产品类库,但只想显示它们的接口而不是实现。

代码实现

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

总结

这就是简单的工厂的实现,类似于一个工厂,生产出来各式各样实现相同接口的物品。