Selaa lähdekoodia

add singleton pattern

MrOzOn 4 vuotta sitten
vanhempi
commit
6779382553
3 muutettua tiedostoa jossa 59 lisäystä ja 2 poistoa
  1. 6 0
      .idea/vcs.xml
  2. 20 2
      src/creational_patterns/README.MD
  3. 33 0
      src/creational_patterns/singleton/main.kt

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 20 - 2
src/creational_patterns/README.MD

@@ -49,7 +49,7 @@
 
 Это паттерн, порождающий̆ классы.
 
-Это паттерн, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
+Это порождающий паттерн, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
 
 ## Применимость
 
@@ -67,7 +67,7 @@
 
 #Прототип (Prototype)
 
-Это паттерн, который задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа
+Это порождающий паттерн, который задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа
 
 ## Применимость
 
@@ -89,3 +89,21 @@
 - уменьшение числа подклассов
 - динамическая настройка конфигурации приложения классами
 
+#Одиночка (Singleton)
+
+Это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
+
+## Применимость
+
+- должен существовать ровно один экземпляр некоторого класса, к которому может обратиться любой клиент через известную точку доступа
+- единственный экземпляр должен расширяться путем порождения подклассов, а клиенты должны иметь возможность работать с расширенным экземпляром без модификации своего кода
+
+## Отношения
+
+Клиенты получают доступ к экземпляру класса Singleton только через его операцию **getInstance**.
+
+## Результаты
+
+- контролируемый доступ к единственному экземпляру
+- возможность уточнения операций и представления. От класса Singleton можно порождать подклассы, а приложение легко настраивается экземпляром расширенного класса.
+

+ 33 - 0
src/creational_patterns/singleton/main.kt

@@ -0,0 +1,33 @@
+package creational_patterns.singleton
+
+class Database private constructor() {
+
+    companion object {
+        private var _instance: Database? = null
+        @Synchronized
+        fun getInstance(): Database {
+            if (_instance==null){
+                _instance = Database()
+            }
+            return _instance!!
+        }
+    }
+
+    init {
+        println("Singleton created!!!")
+    }
+
+    fun doSomething() {
+        println("doing something...")
+    }
+}
+
+fun main(){
+    //first val from Database
+    val database1 = Database.getInstance()
+    database1.doSomething()
+    //second val from Database
+    val database2 = Database.getInstance()
+    database2.doSomething()
+
+}