Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.03.2008, 02:24
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 21  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Цитата:
Сообщение от divinus
собств. вопрос... )
но вот встала потребность создать "одиночку" на AS3, а там как мне помнится запрещается объявления конструктора "приватным"... как быть? может быть кто-то сталкивался?
Можно воспользоваться статическим блоком инициализации - это гарантирует нам, что экземпляр нашего класса будет создан(в момент первого обращения к классу), а желание создать еще один экземпляр(как уже упоминалось) выкидыванием исключения, когда экземпляр уже создан.
Код:
package  {
	public class Singleton {
		
		private static var _instance:Singleton;
		
		//static block
		{
			_instance = new Singleton();
		}
		
		public function Singleton() {
			if (_instance != null) {
				throw new ArgumentError("bla-bla-bla");
			}
		}
		
		public static function getInstance():Singleton {
			return _instance;
		}
	}
}
__________________
:emocry:

Старый 18.03.2008, 03:06
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 22  
Ответить с цитированием
Mr. Fixit
Banned
[+1 08.05.08]
[+4 14.04.08]
[+1.3 02.05.08]

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
Цитата:
Могу показать конкретные косяки.
Покажи мне будет интересно, и на пользу.

Старый 18.03.2008, 03:20
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 23  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Цитата:
Сообщение от Mr. Fixit
Покажи мне будет интересно, и на пользу.
var foo:ClassA = new ClassA(true);
var boo:ClassA = new ClassA(true);
trace("is it singleton? -"+foo == boo);

Во многих случаях можно спорить о том что нравится/не нравится. Это называется холивар.
Холивар обычно заканчивается, если кто-то способен доказать свою точку зрения примером. Например, как тот, что я написал.
__________________
http://realaxy.com

Старый 18.03.2008, 03:37
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 24  
Ответить с цитированием
Mr. Fixit
Banned
[+1 08.05.08]
[+4 14.04.08]
[+1.3 02.05.08]

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
да я согласен что при тру.. кривость есть.. но зачем писать в данном контексте тру разработчику.. ну вообще то можно конечно ссылатся на того кто вызывает.. если не сам класс.. то ошибка.
Ясн... Iv спасибо.

Старый 18.03.2008, 09:58
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 25  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Холивар - это обычно что-то vs что-то. А Синглтон - он против кого?
В смысле, кто у него прямые конкуренты?

Вот если хочется чего-то глобааального такого, то выбор не велик: или синглтон, или статические методы или методы пекеджа (что по сути те же статические методы). Статические методы имеют свои минусы.
Совсем отказаться от глобального доступа - тоже не всегда хорошо.

Старый 18.03.2008, 10:24
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 26  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Холивар - это когда писками меряются. например я это уже 1й зачаток холивара в данном топе. может хоть один разовьём? а скучно.

Старый 18.03.2008, 13:03
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 27  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Почитав книжку Foe, Object-Oriented Actionscript 3.0 (2007) долгое время использовал их версию синглтона
Код:
package {

    public class Singleton {

        private static var instance:Singleton;
        private static var allowInstance:Boolean;

        public function Singleton() {
            if(!allowInstance) { 
                throw new Error("Error: use Singleton.getInstance() instead of new keyword");
            }
        }

        public static function getInstance(fg):Singleton 
        {
            if(instance == null) {
                allowInstance = true;
                instance = new Singleton();
                trace("Singleton instance created");
                allowInstance = false;
            } else { 
                trace("Singleton instance already exists");
            }
            return instance;
        }
        
        public function doSomething():void {
            trace("doing something");
        }
    }
}
В последнем проекте решил не использовать этот паттерн вовсе, никаких неудобств пока не обнаружил.
В каких конкретных случаях из практики использование этого паттерна необходимо?
И какие причины против его использования?

Старый 18.03.2008, 13:16
divinus вне форума Посмотреть профиль Отправить личное сообщение для divinus Найти все сообщения от divinus
  № 28  
Ответить с цитированием
divinus
 
Аватар для divinus

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
"необходимость" в программировании возникает вообще крайне редко... одну и ту же задачу можно решить множеством способов. Другое дело удобство, расширяемость, сопровождение, инкапсуляция, повторное использование кода и т.д. и т.п....
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...

Старый 18.03.2008, 13:21
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 29  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Ну взять, скажем, опции: громкость музыки и эффектов, режим оконный/полноэкранный, качество высокое/низкое, режим паузы, режим mute и так далее.

Частенько нужны из самых разных и отдалённых концов приложения. Самый простой способ - сделать нечто с глобальным доступом.
Одиночка тут вполне годиться.

Старый 18.03.2008, 13:30
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 30  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
terbooter, вообще, синглтон сейчас многие относят к антипаттернам. И, наверное, это правильно.
Я думаю, что правильно его относить к антипаттернам, но не правильно совершенно от него отказываться.

Так сложилось исторически. Это как использование _root в AS1-2. Синглетон объявили паттерном (т.е. рекомендуемым к применению шаблоном), но его используют в целях, для которых он совершенно не предусмотрен.

Реальное назначение синглетона - предоставлять доступ к единственному экземпляру класса и не допускать возможность создания второго.
Как правило, ошибочное использование синглетона - организация глобального доступа к объекту.

Так вот, синглетон используют для организации глобального доступа раз в 100 чаще, чем в целях, которым он должен служить.
Объявляя синглетон антипаттерном можно добиться того, что люди будут куда внимательнее относиться к его использованию.
__________________
http://realaxy.com

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.