Шаблон проектирования "Одиночка"
25 января 2020Относится к порождающим шаблонам.
Позволяет содержать только один экземпляр объекта в приложении, запрещая создавать новый экземпляр.
Плюсы:
- позволяет использовать только один экземпляр обьекта в приложении, запрещая создавать новый;
Минусы:
- нарушает SRP;
- усложняет тестирование;
Пример на PHP
final class Singleton
{
private static $instance;
public static function getInstance()
{
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct()
{
}
private function __clone()
{
}
}
// Использование
$obj = Singleton::getInstance();
Пример на Go
package main
import (
"sync"
)
var (
lock = &sync.Mutex{}
instance *singleton
)
type singleton struct {
}
func main() {
getInstance()
}
func getInstance() *singleton {
if instance == nil {
lock.Lock()
defer lock.Unlock()
if instance == nil {
instance = &singleton{}
}
}
return instance
}
Источники:
http://designpatternsphp.readthedocs.io/ru/latest/Creational/Singleton/README.html
https://habrahabr.ru/company/mailru/blog/325492/