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

 


 Зв’язані теми