Шаблон проектування "одинак" (pattern singleton).
Сьогодні я хочу розібрати шаблон проектування "одинак", який дуже часто використовується в об`єктно-орієнтованому програмуванні.
Шаблон проектування "Одинак" або Pattern Singleton потрібен для того, щоб у нас не було багато однотипних об`єктів, а завжди використовувався тільки один. Як приклад можна привести клас для роботи з базою даних.
Відео: Шаблони проектування. Singleton (Одинак)
class DB {
protected $ db-
publicfunction __construct(){
$ this-gt;db =newMysqli($ host, $ user, $ pass, $ database) -
}
publicfunctionget(){}
publicfunctionset(){}
publicfunctiondel(){}
}
$ db1 =new DB() -
$ db2 =new DB() -У нас вже 2 об`єкта $ db1 і $ db2, а потім хтось, не знаючи, що вже є такий об`єкт, створить третій і т.д. Це дуже погано позначається на продуктивності і читання коду, а в нашому випадку може відбутися збій, тому що на хостингу обмежена кількість підключень до бази даних.
Відео: C #. Патерн Singleton. урок 40
Щоб вирішити цю проблему, і був придуманий патерн singleton.
class DB {
protected $ db-
staticprivate $ instance =null-
privatefunction __construct(){
$ this-gt;db =newMysqli($ host, $ user, $ pass, $ database) -
}
privatefunction __clone(){}
staticfunction getInstance(){
if(self::$ instance ==null){
self::$ instance =newself() -
}
returnself::$ instance-
}
}
$ db =new DB() -// помилка
$ db = DB::getInstance() -
$ db2 = DB::getInstance() -
$ db3 = DB::getInstance() -Щоб створити об`єкт звичайним способом було не можна, ми робимо наш конструктор приватним, але також не забуваємо і про те, що об`єкти можуть клонувати і закриваємо також метод __clone. Далі ми створюємо статичну властивість $ instance, яке за замовчуванням дорівнює null. Тепер створюємо статичний метод getInstance (), який перевіряє, чи рівне наше статичну властивість null? Якщо так, то ми створюємо екземпляр нашого об`єкта і повертаємо його, а якщо ж ні, то просто повертаємо його. Таким чином, у нас завжди буде один і той же екземпляр, скільки б ми їх не створювали. Використовувати його дуже просто: присвоюємо змінної значення, яке повертає статичний метод getInstance (), класу DB, а далі працюємо, як і зі звичайним об`єктом.
Отже, сьогодні ви дізналися, що таке патерн singleton, а, головне, навіщо він потрібен і де його застосовувати.
Як користуватися blender для початківців
Pdo. Частина 1.
Шаблони електронної пошти на html.
Запит sql на створення і видалення бази даних
Тип меню: стандартний шаблон матеріалу
Тип меню: шаблон списку категорії
Шаблон проектування адаптер. Pattern adapter.
Шаблон оголошення з відривними листочками в word.
Створення движка на mvc. Робимо можливість редагування і видалення користувачів.
Модифікатори доступу в php
Клас для роботи з базою даних
Створення движка на mvc. Вступ.
Тип меню: шаблон блогу розділу
Шаблон проектування "стратегія" (pattern strategy).
Помилка max user connections в mysql
Шаблон проектування фасад. Pattern facade.
Тип меню: шаблон відправки матеріалу
Шаблон оголошення з відривними листочками в excel.
Створення движка на mvc. Починаємо роботу з базою даних.
Тип меню: шаблон блогу матеріалів на головній
Структура бази даних
Створення движка на mvc. Робимо можливість редагування і видалення користувачів.
Модифікатори доступу в php
Pdo. Частина 1.
Шаблон проектування "стратегія" (pattern strategy).
Помилка max user connections в mysql
Створення движка на mvc. Вступ.
Створення движка на mvc. Починаємо роботу з базою даних.
Тип меню: шаблон блогу матеріалів на головній
Клас для роботи з базою даних