单例模式

定义

单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。
该模式有三个基本要点:
一是这个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。

优点


package Singleton

import "sync"

var ( p *Pet once sync.Once )

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

func GetInstance() *Pet { return p }

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

func (p Pet) SetName(n string) { p.mux.Lock() defer p.mux.Unlock() p.name = n } func (p Pet) GetName() string { p.mux.Lock() defer p.mux.Unlock() return p.name } func (p Pet) IncrementAge() { p.mux.Lock() defer p.mux.Unlock() p.age++ } func (p Pet) GetAge() int { p.mux.Lock() defer p.mux.Unlock() return p.age }

``` go
func TestGetInstance(t *testing.T) {
    p1:=GetInstance()
    p2:=GetInstance()
    if p1==p2 {
        fmt.Println("单例")
    }
}
其他设计模式

设计模式Git源代码 00简单工厂模式 01工厂方法模式 02抽象工厂模式 03外观模式 04建造者模式 05桥接模式 06命令模式 07迭代器模式 08模板模式 09访问者模式 10备忘录模式 11责任链模式 12中介模式 13原型模式 14状态模式 15策略模式 16享元模式 17组合模式 18解释器模式 19单例模式 20适配器模式 21代理模式 22装饰器模式 23观察者模式