Нужны ошибки компиляции при создании экземпляра синглетона извне? Запросто!
Саму идею синглетонов не очень люблю, и очень редко их использую, но тут в курилке товарищ подсказал способ, как в as3 сделать не рантайм еррор при создании экземпляра синглетона, а ошибку компиляции.
Собственно, расписывать код не буду - проще показать:
package { public class Singleton { private static var _instance:Singleton; public var value:int = 1; public function Singleton(protector:Protector) { } static public function get instance():Singleton { if (!_instance) _instance = new Singleton( new Protector()); return _instance; } } } internal class Protector{ public function Protector() { super(); } }
а вот тут ошибка компиляции, т.к. никому кроме синглетона,
не получить доступ к классу Protecor
Не претендую на первооткрывателя и можете меня называть аккордеонистом, но я про этот способ услышал только сегодня.
UPD
Особо кривые ручки всё равно обойдут этот приём написав
Тут можно, конечно, проверять параметр в конструкторе на null, но это будет уже не то..
Печаль

Всего комментариев 10
Комментарии
![]() ![]() |
|
Уже видел ранее этот вариант, но только сейчас въехал, что вся прелесть в ошибке на этапе компиляции!
Спасибо. |
![]() ![]() |
|
Прикольно.
|
![]() ![]() |
|
Такой же пример синглтона описывается в книге Шаблонов проектирования
Очень удобный способ, использую его при необходимости. пс. Да и ещё нужно добавить проверку на передачу в конструктор null. |
|
Обновил(-а) Tails 13.09.2013 в 10:37
|
![]() ![]() |
|
![]() ![]() |
|
Постоянное обращение к статическому классу не затратное действие? Вроде-бы это последняя область поиска определения.
|
![]() ![]() |
|
Tails, не представляю себе синглтон в качестве класса для реализации задач с жесткими требованиями к производительности. Статик пойдет.
|
![]() ![]() |
|
Ну да, так-то
Цитата:
SoundManager.playSound(mySound);
|
![]() ![]() |
|
Ээээ это баян ппц какой давности.
|
Последние записи от Котяра
- Страх и ненависть в Нью-Дели или сборка мультипака для arm7 и x86 c Adobe AIR 14 в FB (16.06.2014)
- Нативный EventDispatcher в старлинге (27.11.2013)
- Нужны ошибки компиляции при создании экземпляра синглетона извне? Запросто! (13.09.2013)
- ARP - новый формат упаковки ресурсов (07.02.2013)
- DropShadowFilter и GlowFilter в Starling (16.01.2013)