Шаблон проектування "одинак" (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, а, головне, навіщо він потрібен і де його застосовувати.

Поділися в соціальних мережах:

Схожі
Створення движка на mvc. Робимо можливість редагування і видалення користувачів.Створення движка на mvc. Робимо можливість редагування і видалення користувачів.
Модифікатори доступу в phpМодифікатори доступу в php
Pdo. Частина 1.Pdo. Частина 1.
Шаблон проектування "стратегія" (pattern strategy).Шаблон проектування "стратегія" (pattern strategy).
Помилка max user connections в mysqlПомилка max user connections в mysql
Створення движка на mvc. Вступ.Створення движка на mvc. Вступ.
Створення движка на mvc. Починаємо роботу з базою даних.Створення движка на mvc. Починаємо роботу з базою даних.
Як користуватися blender для початківцівЯк користуватися blender для початківців
Тип меню: шаблон блогу матеріалів на головнійТип меню: шаблон блогу матеріалів на головній
Клас для роботи з базою данихКлас для роботи з базою даних
» » Шаблон проектування "одинак" (pattern singleton).