1 创建型模式

  • 简单工厂模式(Simple Factory)
  • 单例模式(Singleton)
  • 工厂方法模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)
  • 创建者模式(Builder)
  • 原型模式(Prototype)

1.1 简单工厂模式

Go中没有构造函数,一般都是以NewXxx函数来进行相关初始化工作,当NewXxx函数返回接口时,这就是一个简单工厂模式,包中会封装接口的实现细节。如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package simple

type API interface {
	Do()
}

func NewAPI() API {
	return api{}
}

type api struct {
}

func (a api) Do() {
	//TBD...
}

使用

1
2
var api = simple.NewAPI()
api.DO()

1.2 单例模式

单例模式将类型的实例化限制为单个对象。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package singleton

type singleton map[string]string

var (
    once sync.Once

    instance singleton
)

func New() singleton {
	once.Do(func() {
		instance = make(singleton)
	})

	return instance
}

使用

1
2
3
4
5
6
7
8
s := singleton.New()

s["this"] = "that"

s2 := singleton.New()

fmt.Println("This is ", s2["this"])
//This is that

经验:

单例模式表现的是一个全局状态,同时在大多数时候会降低可测试性。

1.3 工厂方法模式

TBD…

1.4 抽象工厂模式

TBD…

1.5 创建者模式

TBD…

1.6 原型模式

TBD…