Singleton vs Static

teroristd

Registered
От заглавието не е ясно за какво иде реч, за това ще обясня.

Имам да кажем клас който държи конекцията към базата данни. Като го направя сингълтон и го извикам някъде, ако не е направена конекция ще направи, ако е направена вече конекция ще ми я върне. С други думи ще работя винаги с една и съща конекция. Ето и пример, като getDBConn() е публична функция която държи конекцията.

$a = Database::getInstance()->getDBConn();
$b = Database::getInstance()->getDBConn();

Питането ми е ако класа не е сингълтон, а функцията getDBConn() вместо това е статична, какво ще се случи ако я викам повече от един път? Нова конекция ли ще създава всеки път?

$a = Database::getDBConn();
$b = Database::getDBConn();

Надявам се ме разбрахте какво имам предвид :) .
 
Статичният клас всеки и ползване на метод, ще прави всеки път по една конекция и ще ти я връща. Реално метода го приеми като проста функция, която ще ти връща винаги някаква конекция. Все пак функцията е самостоятелна и по определените логики ще ти върне определен резултат. Функцията е код за многократно използване с различни параметри. Тоест ако направиш една инстанция на класът и викаш статичните методи в него ти взимаш конекция всеки път и я създаваш всеки път освен ако не е от типа сингълтон и да правиш проверка дали статик метод държи инстанцията и да ти я връща. Тоест Статични методи с малко логика водят до същото което правиш в getInstance просто сингълтона има един вход. Хубавото на статичните методи е също че може да са прайвът и публик тоест зависи от логиката която ти създаваш. Сингълтона е един начин а статичните методи са друг. Въпрос на избор, но статичните методи могат така доста по-удобно на моменти да се работи с тях защото можеш примерно да сменяш параметри набързо за определената конекция и по-късно да си работиш с дефаутови стойности. Примерно:
Database::setParams('localhost','pass','database');
$a = Database::getDBConn();
Сингълтона налага друг клас да му подава някакви си там стойности. Както и да е и в двата случая е възможно да направиш някакви по-удобни логики.
 
точно вчера си изпих до дъно Singleton-а ми и бях решил да се заредя и гледам заглавието в Дъра бъра и си викам явно има някое друго подобно добро уиски на име Static. Ще взема да го пробвам макар да не съм го чувал.
Оказа се , че това било PHP .

Май пак ще купувам кашонче Singleton.
 
Улучил съм в десятката :D . Аз пък не знаех че има такова уиски, ама щом взимаш с кашони сигурно е добро.
 
Разликата е в принципа. Когато използваш Singleton ти създаваш обект. Този обект можеш по-късно да го кешираш, сериализираш и т.н. Със статичен клас не можеш.
 

Back
Горе