Evgenii Legotckoi
Evgenii LegotckoiSept. 20, 2018, 9:33 a.m.

Generative Design Patterns - Singleton

Goals

  1. Make sure the class has only one instance and provides a global access point to it.
  2. Encapsulated "initialization at a certain point in time" or "initialization on first use".

Problems

An application needs one and only one object instance. In addition, lazy initialization and global access are required.


Discussion

Make the object class responsible for creating one single instance, initializing it, accessing it, and enforcing it. Declare an instance as a private static data member. Provide a public static member function that encapsulates all initialization code and provides access to the instance.

The client calls the accessor function (using the class name and scope resolution operator) when a reference to a singleton object is required.

A singleton should only be considered if all three of the following criteria are met: Ownership of a single instance cannot reasonably be assigned

  • Ownership of a single instance cannot reasonably be assigned to any objects
  • Desirable lazy initialization
  • Global access is not provided

If one of the conditions is not met, then the Singleton is not particularly interesting.

The Singleton pattern can be extended to support access to an application-specific number of instances.

Structure

Make the instance's Singleton class responsible for access and "initialization on first use". The single instance is a private static attribute. The accessor function is a public static method.

Example

The Singleton pattern ensures that a class has only one instance and provides a global access point to that instance. It is named after the singleton set, which is defined as a set containing one element. The Office of the President of the United States is Singleton. The United States Constitution determines the means by which the President is elected, limits the term of office, and determines the order of succession. As a result, there can be at most one incumbent president at any given time. Regardless of the identity of the incumbent, the title "President of the United States" is a global hotspot that identifies a person in an office.

Control List

  1. Define a private static attribute in the "Sigleton" class.
  2. Define a public static access function in the class.
  3. Do "lazy initialization" (creation on first use) in the accessor function.
  4. Define all constructors as private or protected.
  5. Clients can only use the access function to work with Singleton.

Rules of thumb

  • Abstract Factory, Builder and Prototype can use Singleton in their implementation.
  • Facade objects are often singletons because only one Facade object is required.
  • State objects are often singletons.
  • The advantage of Singleton over globals is that you are absolutely sure of the number of instances when using Singleton and you can also change the code to manage any number of instances.
  • The Singleton design pattern is one of the more unmanageable patterns. Singletons are meant to be used when a class must have exactly one instance, no more, no less. Developers often use Singletons in a misguided attempt to replace global variables. Singleton won't do away with global variables; it just renames them.
  • When is a Singleton not needed? Short answer: most of the time. Long answer: When is it easier to pass an object's resource as a reference to the objects that need it, rather than let the objects access the resource globally. The real problem with Singletons is that they give you such a good excuse not to think about the corresponding object visibility. Finding the right balance of exposure and object protection is critical to maintaining code flexibility.
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
SH

C++ - Test 001. The first program and data types

  • Result:33points,
  • Rating points-10
г
  • ги
  • April 24, 2024, 1:51 a.m.

C++ - Test 005. Structures and Classes

  • Result:41points,
  • Rating points-8
l
  • laei
  • April 23, 2024, 7:19 p.m.

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:10points,
  • Rating points-10
Last comments
k
kmssrFeb. 9, 2024, 5:43 a.m.
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVADec. 25, 2023, 9:30 p.m.
Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJoDec. 25, 2023, 7:38 p.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
GvozdikDec. 19, 2023, 8:01 a.m.
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
G
GarApril 22, 2024, 3:46 p.m.
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil AcademicsApril 20, 2024, 5:45 p.m.
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasovApril 14, 2024, 4:41 p.m.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел ДорофеевApril 14, 2024, 12:35 p.m.
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrexApril 4, 2024, 2:47 p.m.
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Follow us in social networks