Тип паттерна: порождающий
Один из самых легких и полезных паттернов является синглтон. С него можно начинать изучать паттерны проектирования сразу после изучения основ ООП.
Его поведение крайне простое: не допустить существование в программе двух объектов одного класса. Для класса, реализующего синглтон, может существовать только один объект. И класс предоставляет глобальную точку доступа к нему.
Глобальный объект, конечно, усложняет масштабирование системы. И это минус. Но для небольших приложений вполне применим.
Например, часто бывает нужно настроить коннект к базе и потом использовать его из разных модулей. Здесь может прийти на помощь синглтон.
В чем принцип работы?
Во-первых скрываются конструкторы класса модификатором private.
Во-вторых у класса добавляется статическое поле - экземпляр класса, недоступное извне (private).
В-третьих добавляется статический метод возвращающий этот экземпляр getInstance()
Пример простого синглтона:
public class Singleton {
 
    private static Singleton instance;
 
    private Singleton (){
    }
 
    public static Singleton getInstance(){
  
 if (instance == null){
     instance = new Singleton();
 }  
        return instance;
    } 
}
К сожалению, здесь нет учета работы в многопоточной среде. Поэтому, чтобы не возникло гонки, можно реализовать синглтон так:
public class Singleton {
 
    private static Singleton instance;
 
    private Singleton (){
    }
 
    public static Singleton getInstance(){
    
 synchronized (this){
     if (instance == null){
         instance = new Singleton();
     }
 }
        return instance;
    } 
}
Или даже так:
public class Singleton {
 
    private static Singleton instance = new Singleton();
 
    private Singleton (){
    }
 
    public static Singleton getInstance(){   
        return instance;
    } 
}

 
Комментариев нет:
Отправить комментарий