Ir patrón de diseño - Singleton

Hay dos principales patrón singleton: fórmula perezoso y hambrientos la fórmula

// fórmula perezoso - thread-safe 
// en lugar de utilizar basado en la estructura 
de tipo struct {Tool 
	valores int 
} 
// build variables privadas 
ejemplo var * Herramienta 
método de obtención // devuelve objeto singleton una transferencia referencia 
func GetInstance () * Tool { 
	SI ejemplo == {nula 
		ejemplo los nuevos nuevos = (Tool) 
	} 
	instancia de retorno 
}

  

// fórmula perezoso - flujos seguros - para realizar una operación de cierre de cada operación - no es muy alto rendimiento 
// en lugar de usar basado en la estructura 

de tipo struct {Herramienta de 
	valores int 
} 
// acumulación privada variables de 
instancia var Herramienta * 
objeto // bloqueo 
var sync.Mutex Lock 
// únicos de adquisición objeto método devuelve una transmisión de referencia 
FUNC la GetInstance () {* Herramienta 
	Lock.lock () 
	la lock.unlock Defer () 
	SI == ejemplo nil { 
		instancia nueva nuevos = (Tool) 
	} 
	instancia de retorno 
}

  

// perezoso fórmula - doble comprobado 
simultáneamente // base entonces perezoso de fórmula (thread-safe) en optimizado para reducir la operación de bloqueo, no afecta el rendimiento thread-safe 

// en lugar de utilizar basado en la estructura 
de tipo struct {Herramienta de 
	valores int 
} 
// bloqueo objeto 
var sync.Mutex bloqueo 
ejemplo var * Herramienta 
// primera sentencia no bloqueo, bloqueo de segundo para garantizar la seguridad de hilo, una vez creado el objeto, éste no llegaría encerrado. 
la GetInstance FUNC () {* Herramienta 
	SI ejemplo nula == { 
		Lock.lock () 
		SI == instancia nula { 
			instancia nueva nuevos = (herramienta) 
		} 
		lock.unlock () 
	} 
	instancia de retorno 
}

  

// hambre --init al estilo chino () para crear 
// flujos seguros, el único inconveniente es que se crea el objeto, mientras que la introducción de un paquete, y seguirá ocupando en la memoria 
del tipo de herramienta struct { 
} 
var Tool * 
// inicializar una ejemplos 
FUNC el init () { 
  nueva herramienta nuevos = (herramienta) 
} 

// ejemplo newconfig proporciona un método de obtención de 
FUNC NewTool () {* Herramienta 
  Herramienta de retorno 
}

  

// hambre de estilo chino - para crear una manera variable global 
// flujos seguros, el único inconveniente es que se crea el objeto, mientras que la introducción de un paquete, y seguirá ocupando la memoria
Herramienta struct {tipo 
} 
// variable global 
var = new nueva herramienta herramienta * (herramienta) 
// ejemplo newconfig proporciona un método para obtener 
newconfig FUNC () {* Herramienta 
	Herramienta de retorno 
}

Por sync.Once Asegúrese de crear un método de objeto se ejecuta sólo una vez ---- haber comprobado el doble del efecto del juez sync.Once interna envasados

var vez sync.Once 
func GetInstance () * Herramienta { 
	once.Do (func () { 
		instancia = new (Tool) 
	}) 
	instancia de retorno 
}

  

Supongo que te gusta

Origin www.cnblogs.com/chen-ya-ping/p/12463422.html
Recomendado
Clasificación