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
AD

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

  • Result:50points,
  • Rating points-4
m

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

  • Result:80points,
  • Rating points4
m

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

  • Result:20points,
  • Rating points-10
Last comments
ИМ
Игорь МаксимовNov. 22, 2024, 10:51 p.m.
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiNov. 1, 2024, 12:37 a.m.
Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEOct. 19, 2024, 6:19 p.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовOct. 5, 2024, 5:51 p.m.
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5July 5, 2024, 9:02 p.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
Evgenii Legotckoi
Evgenii LegotckoiJune 25, 2024, 1:11 a.m.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Nov. 15, 2024, 5:04 p.m.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectJune 4, 2022, 1:49 p.m.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimOct. 25, 2024, 7:10 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Follow us in social networks