Статья
Шаблон проектирования "Одиночка"

Шаблон проектирования "Одиночка"

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/