Инструменты пользователя

Инструменты сайта


pattern_singleton

Назад

Паттерн Одиночка гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.

Плюсы

  1. контролируемый доступ к единственному экземпляру;
  2. уменьшение числа имён;
  3. допускает уточнение операций и представления;
  4. допускает переменное число экземпляров;
  5. большая гибкость, чем у операций класса.

Минусы

  1. глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя к созданию немасштабируемого проекта.
  2. усложняет написание модульных тестов и следование TDD
Singleton
public class Singleton
{
    private static Singleton instance;
    private Singleton(){}
 
    public static Singleton getInstance()
    {
        if(instance == null)
        {
            instance = new Singleton();
        }
        return instance;
    }
    //Другие методы  
}
Main
public class Main
{
    public static void main(String[] args)
    {
        Singleton sing = Singleton.getInstance();
    }
}

Существует проблема использования паттерна одиночки в много поточном программировании а именно это когда в каждом потоке свой экземпляр объекта Singleton.

Решаем проблемы многоточечного доступа

Singleton
public class Singleton
{
    private volatile static Singleton instance;
    private Singleton(){}
 
    public static Singleton getInstance()
    {
        if(instance == null)
        {
            synchronized (Singleton.class)
            {
                if(instance == null)
                {
                    instance = new Singleton();                
                }
            }
        }
        return instance;
    }
    //Другие методы  
}

Таким образом мы увеличим производительность кода в десятки раз нежели если мы в целый метод getInstance поместили synchronized.