![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
|
после многих танцев с бубном родил красивое решение
кому надо, кушайте наздоровье ![]() P.S. у кого есть какие мысли и соображения готов обсудить package { public class Singleton { private static var instance:Singleton = null; // грубо имитируем приватность конструктора private static var privater:Boolean = true; public function Singleton() { if(privater) { throw new Error("Use Singleton.getInstance() insted new Singleton() !"); } } public static function getInstance():Singleton{ if(!instance){ // ето будет выполнено только первый раз privater = false; instance = new Singleton(); privater = true; } return instance; } } } ![]()
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Можно чуть попроще, если вам надо. По моему скромному мнению, есть ошибки из-за невнимательности, от которых надо страховаться, а есть злодейство. Дёргать конструктор у синглтона - злодейство. Я бы даже выкинул проверку из getInstance из 95-99% синглтонов %)
package { public class Singleton { private static var instance:Singleton = null; // грубо имитируем приватность конструктора public function Singleton() { if(instance) { throw new Error("Use Singleton.getInstance() insted new Singleton() !"); } instance = this; } public static function getInstance():Singleton{ if(!instance){ // ето будет выполнено только первый раз new Singleton(); } return instance; } } } Последний раз редактировалось -De-; 23.06.2010 в 02:08. |
|
|||||
|
Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
|
Ваш подход имеет право на жизнь, но он сырой в плане что первый инстанс можно породить как методом getInstance, так и конструктором. Во втором случае это будет работать что не есть хорошо. Моя первая реализация была такой же, но я пришел к тому что вызов конструктора извне Всегда должен генерировать исключение, а порождение синглтона, как и возврат ссылок на него должен выполнять один и тот же метод и это представьте должен быть только он. Вы не поверите, но мой подход таки более законченый.
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов Последний раз редактировалось Elser; 23.06.2010 в 01:46. |
|
|||||
|
ветеран форума
|
Мне вот такая реализация нравится
package { public final class Singleton { private static var _instance:Singleton = new Singleton(); public function Singleton() { if ( _instance ) throw new Error("Instantiation failed: Use Singleton.getInstance() instead of new Singleton()."); } public static function getInstance():Singleton { return _instance; } } }
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
|
|
|||||
|
Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
|
udaaff +1, спасибо
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов |
|
|||||
|
4AM Games
|
Перестаньте делать синглтоны )) 21ый век, можно на мультитоны[1] переходить ^_^
[1] http://en.wikipedia.org/wiki/Multiton.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
Только, пожалуйста, не МВЦ) ![]()
__________________
Отряд Котовскага |
|
|||||
|
А может лучше обсудить "как правильно жить без синглтонов"?
Потому что из-за этой сволочи половину классов в проекте уже отдельно не протестируешь , не говоря о том, что иногда просто не понятно что ждать от этой глобальной точки в данный момент, надеясь что ее никто не поменял нечаянно.Последний раз редактировалось expl; 23.06.2010 в 23:16. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|