golang工厂模式

264 阅读1分钟

工厂模式是创建型模式之一,经典的工厂方法模式是在父类中提供一个创建对象的方法,允许子类决定实例化的对象。由于go中缺少OOP的相关特性,所以只能实现该模式的基础版----简单工厂模式。

实现

假设有json,toml两种配置文件,以解析不同格式配置文件的方法实现如下:

定义解析的接口

package main

type IParse interface {
	parseCfgfile()
}

解析器实现接口

package main

type parser struct {
	name string
}

func (y *parser) parseCfgfile() {
	println(y.name, "parse .... ")
}
  • json 解析器
package main

type jsonParser struct {
	parser
}

func newJsonParser() IParse {
	return &jsonParser{
		parser: parser{
			name: "json",
		},
	}
}

  • toml 解析器
package main

type tomlParser struct {
	parser
}

func NewTomlParser() IParse {
	return &tomlParser{
		parser: parser{
			name: "toml",
		},
	}
}

客户端调用

package main

// 简单的工厂
func sFactory(t int) IParse {
	var obj IParse
	switch t {
	case 1:
		obj = newJsonParser()
	case 2:
		obj = NewTomlParser()
	default:
		println("类型错误")
	}
	return obj
}

// 客户端调用
func client() {
	parser := sFactory(1)
	parser.parseCfgfile()
}

总结

当在不同条件下,由不同的方式去实现一个任务时(创建不同的类示例),可以使用工厂模式。由于创建类的代码和使用类的代码分离,符合单一职责和开闭原则,代码扩展性高。