Шаблон проектування "одинак" (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. Починаємо роботу з базою даних.
- Тип меню: шаблон блогу матеріалів на головній
- Структура бази даних