设计模式——单例模式

2020-11-05  本文已影响0人  DevilRoshan

什么是单例模式?

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

实现

var (
    p *Pet
    once sync.Once
)

func GetInstance() *Pet {
    return p
}

func init()  {
    once.Do(func() {
        p = &Pet{}
    })
}

type Pet struct {
    name string
    age int
    mux sync.Mutex
}

func (this *Pet)SetName(name string) {
    this.mux.Lock()
    defer this.mux.Unlock()
    this.name = name
}

func (this *Pet)GetName() string {
    this.mux.Lock()
    defer this.mux.Unlock()
    return this.name
}

func (this *Pet)SetAge(age int) {
    this.mux.Lock()
    defer this.mux.Unlock()
    this.age = age
}

func (this *Pet)GetAge() int {
    this.mux.Lock()
    defer this.mux.Unlock()
    return this.age
}

func (this *Pet)IncrementAge() {
    this.mux.Lock()
    defer this.mux.Unlock()
    this.age++
}
func TestGetInstance(t *testing.T) {
    p := GetInstance()
    p.SetAge(10)
    p.IncrementAge()
    fmt.Println("p 的 Age现在是", p.GetAge())
    
    q := GetInstance()
    q.IncrementAge()
    fmt.Println("q 的 Age现在是", q.GetAge())
}
/*
=== RUN   TestGetInstance
p 的 Age现在是 11
q 的 Age现在是 12
--- PASS: TestGetInstance (0.00s)
PASS
*/

优点

缺点

使用场景

上一篇下一篇

猜你喜欢

热点阅读