Я не хочу создавать дискуссию о синглтоне лучше, чем статический или лучше, чем глобальный, и т. Д. Я прочитал десятки вопросов о подобных предметах на SO, но я не смог придумать ответ на этот конкретный вопрос поэтому я надеюсь, что теперь кто-то сможет осветить меня, ответив на этот вопрос одним (или более) действительно простыми ПРИМЕРАМИ , а не просто теоретическими дискуссиями.
В моем приложении у меня есть типичный класс БД для абстрагирования слоя БД и для выполнения задач на БД без необходимости писать везде в коде mysql_connect / mysql_select_db / mysql...
Я мог бы написать класс либо как СТАТИЧЕСКИЙ КЛАСС:
class DB
{
private static $connection = FALSE; //connection to be opened
//DB connection values
private static $server = NULL; private static $usr = NULL; private static $psw = NULL; private static $name = NULL;
public static function init($db_server, $db_usr, $db_psw, $db_name)
{
//simply stores connections values, without opening connection
}
public static function query($query_string)
{
//performs query over alerady opened connection, if not open, it opens connection 1st
}
...
}
ИЛИ как SINGLETON:
class DBSingleton
{
private $inst = NULL;
private $connection = FALSE; //connection to be opened
//DB connection values
private $server = NULL; private $usr = NULL; private $psw = NULL; private $name = NULL;
public static function getInstance($db_server, $db_usr, $db_psw, $db_name)
{
//simply stores connections values, without opening connection
if($inst === NULL)
$this->inst = new DBSingleton();
return $this->inst;
}
private __construct()...
public function query($query_string)
{
//performs query over already opened connection, if connection is not open, it opens connection 1st
}
...
}
Затем в моем приложении, если я захочу запросить базу данных, я мог бы сделать
//Performing query using static DB object
DB:init(HOST, USR, PSW, DB_NAME);
DB::query("SELECT...");
//Performing query using DB singleton
$temp = DBSingleton::getInstance(HOST, USR, PSW, DB_NAME);
$temp->query("SELECT...");
Для меня Синглтон получил единственное преимущество, чтобы не объявлять static
каждый метод класса. Я уверен, что некоторые из вас могут дать мне ПРИМЕР реального преимущества синглтона в этом конкретном случае . Заранее спасибо.