Одиночка (Singleton) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Участники)
(Варианты)
 
(не показаны 3 промежуточные версии этого же участника)
Строка 16: Строка 16:
 
Определяет операцию Instance, которая позволяет клиентам получать доступ к единственному экземпляру.
 
Определяет операцию Instance, которая позволяет клиентам получать доступ к единственному экземпляру.
 
Несет ответственность за создание этого экземпляра.
 
Несет ответственность за создание этого экземпляра.
*
 
  
 
=== Пример ===
 
=== Пример ===
Строка 50: Строка 49:
  
 
=== Достоинства и недостатки ===
 
=== Достоинства и недостатки ===
*  
+
*Контролируемый доступ к единственному экземпляру
 +
*Допускает контролируемое число экземпляров
  
 
=== Варианты ===
 
=== Варианты ===
*
+
*Порождение подклассов Singleton и выбор на этапе выполнения, какой подкласс порождать

Текущая версия на 09:23, 30 сентября 2014

К основной странице курса

Назначение

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

Описание

Для некоторых классов важно чтобы существовал один экземпляр. Как это гарантировать? Необходимо чтобы сам класс контролировал, что у него есть только один экземпляр и запрещал создание дополнительных экземпляров.

Реализация

Диаграмма классов

SingletonCommon.png

Участники

  • Singleton - одиночка

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

Пример

class MainApp
{
    static void Main()
    {
        Singleton s1 = Singleton.Instance();
        Singleton s2 = Singleton.Instance();
    }
}

class Singleton
{
    static Singleton instance;

    protected Singleton()
    {
    }

    public static Singleton Instance()
    {
        if (instance == null)
        {
            instance = new Singleton();
        }

        return instance;
    }
}

Достоинства и недостатки

  • Контролируемый доступ к единственному экземпляру
  • Допускает контролируемое число экземпляров

Варианты

  • Порождение подклассов Singleton и выбор на этапе выполнения, какой подкласс порождать