|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
"Статик" Vs. экземпляр-"одиночка"
Друзья! В своё время спрашивал на счёт статических констант, теперь похожий вопрос возник на более высоком методическом уровне, как раз на счёт методов. Про это тоже как-то речь заходила, но давно и мельком. Так что заострю внимание.
Есть классы, которые хранят универсальные методы, не привязанные к конкретным экземплярам. Например, класс-создатель тултипов или класс, выдающий лэйблы кнопок на нужном языке по ID фразы. Поскольку работу над проектом я начинал, ваще ни фига не разбираясь, многие куски кода я заимствовал (назовём это так), очень слабо понимая нюансы их работы. По итогу подобные классы у меня оказались реализованными двумя разными способами: Первый - это "статики". Все переменные - static, Все методы - static. Тут всё просто. Для использования где бы то ни было импортируем класс и обращаемся к любому static public-у. Второй вариант - это экземпляр-"одиночка". Это не 1-в-1 навороченный GoF синглтон, но смысл тот же. Вот например мои тултипы: public class Tooltips private static var _instance: Tooltips; public function Tooltips() { if (_instance != null) { throw("Error: Tooltip-менеджер уже существует. Используйте Tooltips.getInstance()"); } _instance = this; } public static function getInstance() : Tooltips { return (_instance == null) ? new Tooltips() : _instance; } и дальше работаем с константным указателем, дёргая его паблики. Вопрос, в чём особенности и преимущества/недостатки каждого из подходов? Спасибо.
__________________
Не сломано - не чини! |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
1)Синглтон можно экстендить
2)Ссылку на синглтон можно передать в метод |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Синглтон используется, когда нужны события от него. Класс не может посылать события.
"Типизация" класса затруднительна. Если возникнет необходимость передавать РАЗНЫЕ классы-исполнители в метод, будет непросто разобраться, что за класс передали и есть ли у него такие-то методы/свойства. Ведь все классы имеют один Тип — Class, а методы и свойства у всех разные))
__________________
Reality.getBounds(this); |
|
|||||
С синглтоном идет работа через экземпляр, это объект, и все из этого вытекающее. Один объект, который можно куда-то передать, делегировать, удалить. Его удобнее инкапсулировать. Ну и да, его можно расширять.
__________________
while(live()) { hope(); } |
|
|||||
Цитата:
__________________
adobe AS3 manual |
Часовой пояс GMT +4, время: 16:10. |
|
« Предыдущая тема | Следующая тема » |
|
|