From 91e4cafaa9cfb6b66cd09dbb6612df52a4705a5f Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 14 Nov 2022 21:54:08 +0300 Subject: [PATCH] singleton --- README.md | 1 + singleton/README.md | 3 +++ singleton/app.d | 7 +++++++ singleton/singleton.d | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 singleton/README.md create mode 100644 singleton/app.d create mode 100644 singleton/singleton.d diff --git a/README.md b/README.md index 6a07d7c..a027dfa 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ 1. [Фабричный метод (Простая фабрика)](factorymethod/) 2. [Абстрактная фабрика](abstractfactory/) +3. [Одиночка](singleton/) ## Компиляция diff --git a/singleton/README.md b/singleton/README.md new file mode 100644 index 0000000..500e281 --- /dev/null +++ b/singleton/README.md @@ -0,0 +1,3 @@ +# Одиночка + +Порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. diff --git a/singleton/app.d b/singleton/app.d new file mode 100644 index 0000000..0d4d126 --- /dev/null +++ b/singleton/app.d @@ -0,0 +1,7 @@ +import singleton.singleton; +import std.stdio : writeln; + +void main() +{ + writeln(Singleton.getInstance().getDescription()); +} diff --git a/singleton/singleton.d b/singleton/singleton.d new file mode 100644 index 0000000..d32d07c --- /dev/null +++ b/singleton/singleton.d @@ -0,0 +1,21 @@ +module singleton.singleton; + +class Singleton +{ + private static Singleton singleton; + + private this() {} + + static Singleton getInstance() + { + if (singleton is null) + singleton = new Singleton; + + return singleton; + } + + string getDescription() + { + return "I'm a classic Singleton!"; + } +}