# golang设计模式-简单工厂模式

# 应用场景

  • 通过传递不同的参数返回不同的实例
  • 巧的是,golang通常使用的 NewXxx的方法来床架新的结构实例,本身就是一个简单的工厂模式
  • 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类(接口)。

# 个人理解

  • 一个可以根据不同参数创建不同实例的类,
  • 通常能创建出来不同的实例通常有一个相同父类
  • New函数返回一个接口,这个接口的实现可以有多种

# 最佳实践

package simplefactory

import "fmt"

//API 定义api接口
type API interface {
	Say(name string) string
}

//NewAPI 根据参数返回不同的接口,这个接口其实就是不同的实例
func NewAPI(t int) API {
	if t == 1 {
		return &hiAPI{}
	} else if t == 2 {
		return &helloAPI{}
	}
	return nil
}

// 实现 API接口的结构体
type hiAPI struct{}
func (*hiAPI) Say(name string) string {
	return fmt.Sprintf("Hi, %s", name)
}

//实现 API接口的结构体
type helloAPI struct{}

func (*helloAPI) Say(name string) string {
	return fmt.Sprintf("Hello, %s", name)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31