мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
glossary:design:patterns:creational:singleton [2025/03/23 21:35] – создано radi0devglossary:design:patterns:creational:singleton [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 6: Строка 6:
  
 {{:glossary:design:patterns:creational:singleton1.png}} {{:glossary:design:patterns:creational:singleton1.png}}
- 
- 
-===== Суть ===== 
  
 **Одиночка** — это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. **Одиночка** — это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
Строка 20: Строка 17:
   - **Предоставляет глобальную точку доступа**. Это не просто глобальная переменная, а защищенная от записи глобальная переменная.   - **Предоставляет глобальную точку доступа**. Это не просто глобальная переменная, а защищенная от записи глобальная переменная.
  
-![[singleton-comic-1-ru 1.png]]+{{:glossary:design:patterns:creational:singleton3.png}}
  
 +Применим:
 +  * **Когда в программе должен быть единственный экземпляр какого-то класса**: Одиночка скрывает от клиентов все способы создания нового объекта, кроме специального метода. Этот метод либо создаёт объект, либо отдаёт существующий объект, если он уже был создан.
 +  * **Когда вам хочется иметь больше контроля над глобальными переменными**: В отличие от глобальных переменных, Одиночка гарантирует, что никакой другой код не заменит созданный экземпляр класса, поэтому вы всегда уверены в наличии лишь одного объекта-одиночки.
  
 +++++Преимущества и недостатки |
  
-Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и создать публичный статический метод, который и будет контролировать жизненный цикл объекта-одиночки. +^ **+** ^ **-** ^ 
-## Структура +| Гарантирует наличие единственного экземпляра класса | Нарушает //принцип единственной ответственности класса// | 
-![[structure-ru-indexed.png]] +Предоставляет к нему глобальную точку доступа | Маскирует плохой дизайн | 
-1) **Одиночка** определяет статический метод `getInstance`, который возвращает единственный экземпляр своего класса. +| Реализует отложенную инициализацию объекта-одиночки | Проблемы мультипоточности | 
-## Применимость +| | Требует постоянного создания Mock-объектов при юнитестировании | 
-**Когда в программе должен быть единственный экземпляр какого-то класса**: +++++
-Одиночка скрывает от клиентов все способы создания нового объектакроме специального метода. Этот метод либо создаёт объект, либо отдаёт существующий объектесли он уже был создан.+
  
-**Когда вам хочется иметь больше контроля над глобальными переменными**: +===== Структура =====
-В отличие от глобальных переменных, Одиночка гарантирует, что никакой другой код не заменит созданный экземпляр класса, поэтому вы всегда уверены в наличии лишь одного объекта-одиночки. +
-## Шаги реализации +
-==хы== +
-## Преимущества и недостатки+
  
-| **+**                                               | **-**                                                            | +{{:glossary:design:patterns:creational:singleton4.png}}
-| --------------------------------------------------- | ---------------------------------------------------------------- | +
-| Гарантирует наличие единственного экземпляра класса | Нарушает _принцип единственной ответственности класса_           | +
-| Предоставляет к нему глобальную точку доступа       | Маскирует плохой дизайн                                          | +
-| Реализует отложенную инициализацию объекта-одиночки | Проблемы мультипоточности                                        | +
-|                                                     | Требует постоянного создания Mock-объектов при юнит-тестировании |+
  
-## Отношения с другими паттернами+Одиночка определяет статический метод `getInstance`, который возвращает единственный экземпляр своего класса. 
 + 
 +Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и создать публичный статический метод, который и будет контролировать жизненный цикл объекта-одиночки. 
 + 
 +===== Примеры ===== 
 + 
 +++++Наивный Одиночка |
  
-## Примеры 
-Наивный Одиночка (небезопасный в многопоточной среде !!!) 
 Топорно реализовать Одиночку очень просто — достаточно скрыть конструктор и предоставить статический создающий метод. Топорно реализовать Одиночку очень просто — достаточно скрыть конструктор и предоставить статический создающий метод.
-```cpp+ 
 +(небезопасный в многопоточной среде !!!) 
 +<code cpp>
 /** /**
  * Класс Одиночка предоставляет метод `GetInstance`, который ведёт себя как  * Класс Одиночка предоставляет метод `GetInstance`, который ведёт себя как
Строка 152: Строка 149:
 BAR BAR
 FOO FOO
-``` +</code> 
 +++++
  
-Многопоточный Одиночка: +++++Многопоточный Одиночка | 
-```cpp+<code cpp>
 /** /**
  * Класс Одиночка предоставляет метод `GetInstance`, который ведёт себя как  * Класс Одиночка предоставляет метод `GetInstance`, который ведёт себя как
Строка 249: Строка 246:
 int main() int main()
 {    {   
-    std::cout <<"If you see the same value, then singleton was reused (yay!\n" <<+    std::cout <<"If you see the same value, then singleton was reused (yay!)\n" <<
                 "If you see different values, then 2 singletons were created (booo!!)\n\n" <<                 "If you see different values, then 2 singletons were created (booo!!)\n\n" <<
                 "RESULT:\n";                    "RESULT:\n";   
Строка 259: Строка 256:
     return 0;     return 0;
 } }
-```+</code> 
 Вывод: Вывод:
-``` +<code> 
-If you see the same value, then singleton was reused (yay!+If you see the same value, then singleton was reused (yay!)
 If you see different values, then 2 singletons were created (booo!!) If you see different values, then 2 singletons were created (booo!!)
  
Строка 268: Строка 266:
 FOO FOO
 FOO FOO
-```+</code> 
 +++++