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
i
innorwallNov. 15, 2024, 1:27 p.m.
Release of C++/Qt and QML application deployment utility CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
i
innorwallNov. 15, 2024, 8:26 a.m.
Qt/C++ - Lesson 031. QCustomPlot – The build of charts with time buy generic priligy We can just chat, and we will not lose too much time anyway
i
innorwallNov. 15, 2024, 6:03 a.m.
Qt/C++ - Lesson 060. Configuring the appearance of the application in runtime I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
i
innorwallNov. 14, 2024, 11:07 p.m.
Circuit switching and packet data transmission networks Angioedema 1 priligy dapoxetine
i
innorwallNov. 14, 2024, 10:42 p.m.
How to Copy Files in Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
Now discuss on the forum
i
innorwallNov. 14, 2024, 2:39 p.m.
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
i
innorwallNov. 11, 2024, 9:55 p.m.
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9AnonimOct. 25, 2024, 7:10 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Follow us in social networks