Patterns. Паттерн Singleton. Реализация на Java

Паттерн Singleton. Реализация на Java

Данная тема является продолжением следующей темы:


Содержание


Поиск на других ресурсах:




1. Структура паттерна Singleton. Рисунок

Общая схема паттерна Singleton изображена на рисунке 1.

Структура паттерна Singleton

Рисунок 1. Структура паттерна Singleton

 

2. Структура паттерна Singleton с привязкой к Java-коду

В кодах языка Java особенности реализации паттерна Singleton показаны на рисунке 2.

Создание экземпляра класса происходит в методе Instance(). Из кода клиента экземпляр класса оператором new создать не удастся, поскольку конструктор класса помещен в раздел protected. Из внутреннего кода доступ к конструктору имеет статический метод Instance(), который создает один единственный экземпляр класса. Этот единственный экземпляр и возвращается методом Instance(). Чтобы можно было определять, создан единственный экземпляр класса или нет, метод Instance() объявляется как статический (глобальный).

 

Структура паттерна Singleton с привязкой к Java-коду

Рисунок 2. Структура паттерна Singleton с привязкой к Java-коду

 

3. Текст программы на Java

Ниже приводится текст программы на языке Java, который реализует паттерн Singleton изображенный на рисунках 1, 2.

 

// Реализация паттерна Singleton на Java.
// Класс, демонстрирующий паттерн Singleton
class Singleton {
  private static Singleton _instance=null; // ссылка на экземпляр класса Singleton
  private int a; // внутренние данные

  // Защищенный конструктор класса
  protected Singleton() {
    a = 0;
  }

  // Метод, возвращающий клиенту единственный экземпляр класса Singleton
  public static Singleton Instance() {
    if (_instance==null) {
      _instance = new Singleton(); // создать экземпляр класса Singleton
      return _instance;
    }
    else
      return null;
  }

  // Методы доступа к данным класса
  public void Set(int _a) {
    a = _a;
  }

  public int Get() { return a; }

  // Метод вывода внутренних данных для контроля
  public void Print() {
    System.out.println("A.a = " + a);
  }
}

public class TestSingleton {

  public static void main(String[] args) {
    // Демонстрация использования паттерна Singleton
    // 1. Создать экземпляр класса Singleton с помощью метода Instance()
    Singleton obj1 = Singleton.Instance();
    if (obj1!=null) {
      obj1.Set(233);
      obj1.Print();
    }
    else
      System.out.println("obj1==null");

    // 2. Попытка создания другого экземпляра класса Singleton
    Singleton obj2 = Singleton.Instance();
    if (obj2!=null) {
      obj2.Set(777);
      obj2.Print();
    }
    else
      System.out.println("obj2==null");
  }
}

Результат выполнения программы

A.a = 233
obj2==null

 


Связанные темы