синглтон или статический класс

12
C7
На сайте с 18.01.2011
Offline
5
1693

скажите пожалуйста зачем часто вместо статического класса(см.ниже) используется синглтон?


class DB
{
private static $linkId;

public static function connect()
{
self::$linkId = mysql_connect('xxx', 'xxx', 'xxx');
mysql_select_db('xxx', self::$linkId));
return true;
}
}
TA
На сайте с 12.06.2009
Offline
116
TiA
#1

А где вы тут синглтон увидели?

Профессиональная верстка и разработка сайтов на WordPress (http://www.maultalk.com/topic139110s0.html)
A
На сайте с 29.12.2007
Offline
68
#2
cyklop77:
скажите пожалуйста зачем часто вместо статического класса(см.ниже) используется синглтон?


class DB
{
private static $linkId;

public static function connect()
{
self::$linkId = mysql_connect('xxx', 'xxx', 'xxx');
mysql_select_db('xxx', self::$linkId));
return true;
}
}

1. Статичные классы медленнее.

2. Синглтон - это не просто вызов каких- то методов. Очень часто это полноценный объект, с геттерами/сеттерами, магическими методами и пр. плюшками.

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

Простейший синглтон - инстанс, а не то, что Вы привели выше ;)

C7
На сайте с 18.01.2011
Offline
5
#3

здесь статический класс. синглтон понятно как выглядит.

в показанный класс тоже можно добавить магические методы и плюшки

TA
На сайте с 12.06.2009
Offline
116
TiA
#4
aktuba:
2. Синглтон - это не просто вызов каких- то методов. Очень часто это полноценный объект, с геттерами/сеттерами, магическими методами и пр. плюшками.

Синглтон - это шаблон проектирования, который позволяет гарантировать, что в скрипте будет лишь один объект определенного класса. Реализуется обычно закрытием метода __construct() и реализации статического метода типа Get_Instance() который возвращает единственный экземпляр класса. Этот экземпляр хранится в статическом свойстве класса.

В примере выше просто объявили статический метод для подключения к базе данных и статическое свойство с идентификатором подключения. Вот и все.

C7
На сайте с 18.01.2011
Offline
5
#5
TiA:
Синглтон - это шаблон проектирования, который позволяет гарантировать, что в скрипте будет лишь один объект определенного класса. Реализуется обычно закрытием метода __construct() и реализации статического метода типа Get_Instance() который возвращает единственный экземпляр класса. Этот экземпляр хранится в статическом свойстве класса.

В примере выше просто объявили статический метод для подключения к базе данных и статическое свойство с идентификатором подключения. Вот и все.

но результат будет тот же самый - возможность существования только одного подключения

Dreammaker
На сайте с 20.04.2006
Offline
569
#6
cyklop77:
в показанный класс тоже можно добавить магические методы и плюшки

добавить не значит полноценно с ними работать.

[Удален]
#7
cyklop77:
но результат будет тот же самый - возможность существования только одного подключения

Стаические методы и переменные - это вроде как пространство имен. Синглтон же полноценный класс со всеми вытекающими... Синглтон имеет несколько преимуществ перед статикой. К примеру: наследование, магич. функции и передача синглтона как параметра для функции и т.п.

J
На сайте с 28.06.2011
Offline
83
#8

А можно ссылку на информацию, что статические классы медленней, чем синглтоны.

TA
На сайте с 12.06.2009
Offline
116
TiA
#9
cyklop77:
но результат будет тот же самый - возможность существования только одного подключения

Подключение в один момент действительно будет одно. Объектов класса может быть много.

Talamat:
Стаические методы и переменные - это вроде как пространство имен.

Это статические методы и переменные. Не больше, ни меньше.

Talamat:
Синглтон же полноценный класс со всеми вытекающими...

Синглтон - это не класс. Это шаблон разработки.

A
На сайте с 29.12.2007
Offline
68
#10
cyklop77:
но результат будет тот же самый - возможность существования только одного подключения

http://habrahabr.ru/blogs/refactoring/103681/ - хороший материал, чтобы понять разницу.

aktuba добавил 05.07.2011 в 15:12

jmas:
А можно ссылку на информацию, что статические классы медленней, чем синглтоны.

К сожалению, не храню результаты тестов. Но я думаю, любой сможет сам это сделать: написать 2 класса и в цикле использовать их.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий