Паттерн Singleton. Реализация на Java
Данная тема является продолжением следующей темы:
Содержание
- 1. Структура паттерна Singleton. Рисунок
- 2. Структура паттерна Singleton с привязкой к Java-коду
- 3. Текст программы на Java
- Связанные темы
Поиск на других ресурсах:
1. Структура паттерна Singleton. Рисунок
Общая схема паттерна Singleton изображена на рисунке 1.
Рисунок 1. Структура паттерна Singleton
⇑
2. Структура паттерна Singleton с привязкой к Java-коду
В кодах языка Java особенности реализации паттерна Singleton показаны на рисунке 2.
Создание экземпляра класса происходит в методе Instance(). Из кода клиента экземпляр класса оператором new создать не удастся, поскольку конструктор класса помещен в раздел protected. Из внутреннего кода доступ к конструктору имеет статический метод Instance(), который создает один единственный экземпляр класса. Этот единственный экземпляр и возвращается методом Instance(). Чтобы можно было определять, создан единственный экземпляр класса или нет, метод Instance() объявляется как статический (глобальный).
Рисунок 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
⇑
Связанные темы
- Паттерн Singleton. Обзор. Особенности применения. Реализация на C++
- Использование паттерна Singleton для классов, образующих иерархию наследования. Реализация на C++, Java, C#
- Паттерн Singleton (Одиночка). Особенности реализации на C#
⇑