From ce74cf0ee512375855a712d578f9614465e6d4e0 Mon Sep 17 00:00:00 2001 From: Jakub Vojvoda Date: Thu, 8 Sep 2016 10:15:12 +0200 Subject: [PATCH] add Singleton pattern --- singleton/README.md | 15 ++++++++++++++ singleton/Singleton.cpp | 46 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 singleton/README.md create mode 100644 singleton/Singleton.cpp diff --git a/singleton/README.md b/singleton/README.md new file mode 100644 index 0000000..21e0a6b --- /dev/null +++ b/singleton/README.md @@ -0,0 +1,15 @@ +## Singleton + +Ensure a class only has one instance, and provide a global point of access to it. +Pattern has creational purpose and deals with object relationships, which are more +dynamic. The Singleton is often used as a part another design patterns (see [Façade] +and [Flyweight]). + +### When to use + +* there must be exactly one instance of a class, and it must be accessible to clients from a well-known access point +* when the sole instance should be extensible by subclassing, and clients should be able to use an extended instance without modifying their code + +[Façade]: https://github.com/JakubVojvoda/design-patterns-cpp/tree/master/facade +[Flyweight]: https://github.com/JakubVojvoda/design-patterns-cpp/tree/master/flyweight + diff --git a/singleton/Singleton.cpp b/singleton/Singleton.cpp new file mode 100644 index 0000000..58006d2 --- /dev/null +++ b/singleton/Singleton.cpp @@ -0,0 +1,46 @@ +/* + * C++ Design Patterns: Singleton + * Author: Jakub Vojvoda [github.com/JakubVojvoda] + * 2016 + * + * Source code is licensed under MIT licence + * (for more details see LICENCE) + * + */ + +#include + +/* + * Singleton + * has private static variable to hold one instance of the class + * and method which gives us a way to instantiate the class + */ +class Singleton { +public: + static Singleton *get() { + if (instance == NULL) { + instance = new Singleton(); + } + return instance; + } + + void tell() { + std::cout << "This is Singleton." << std::endl; + // ... + } + + // ... + +private: + static Singleton *instance; + // ... +}; + + +int main() +{ + Singleton singleton; + singleton.tell(); + + return 0; +}