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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.06.2010, 00:17
Elser вне форума Посмотреть профиль Отправить личное сообщение для Elser Найти все сообщения от Elser
  № 1  
Ответить с цитированием
Elser
 
Аватар для Elser

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
По умолчанию Реализация паттерна Singleton.

после многих танцев с бубном родил красивое решение
кому надо, кушайте наздоровье
P.S. у кого есть какие мысли и соображения готов обсудить
Код AS3:
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;
		}
	}
}
заранее спасибо за здоровую критику
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов

Старый 23.06.2010, 00:40
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Можно чуть попроще, если вам надо. По моему скромному мнению, есть ошибки из-за невнимательности, от которых надо страховаться, а есть злодейство. Дёргать конструктор у синглтона - злодейство. Я бы даже выкинул проверку из getInstance из 95-99% синглтонов %)
Код AS3:
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;
		}
	}
}
upd: дада, согласен с замечаниями!


Последний раз редактировалось -De-; 23.06.2010 в 02:08.
Старый 23.06.2010, 01:22
Elser вне форума Посмотреть профиль Отправить личное сообщение для Elser Найти все сообщения от Elser
  № 3  
Ответить с цитированием
Elser
 
Аватар для Elser

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
Ваш подход имеет право на жизнь, но он сырой в плане что первый инстанс можно породить как методом getInstance, так и конструктором. Во втором случае это будет работать что не есть хорошо. Моя первая реализация была такой же, но я пришел к тому что вызов конструктора извне Всегда должен генерировать исключение, а порождение синглтона, как и возврат ссылок на него должен выполнять один и тот же метод и это представьте должен быть только он. Вы не поверите, но мой подход таки более законченый.
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов


Последний раз редактировалось Elser; 23.06.2010 в 01:46.
Старый 23.06.2010, 01:49
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 4  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Мне вот такая реализация нравится
Код AS3:
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("Остановите Землю, я сойду!!!");

Старый 23.06.2010, 01:49
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
http://garbage-collector.ru/2007/10/...nscript_3.html

Старый 23.06.2010, 02:02
Elser вне форума Посмотреть профиль Отправить личное сообщение для Elser Найти все сообщения от Elser
  № 6  
Ответить с цитированием
Elser
 
Аватар для Elser

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
udaaff +1, спасибо
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов

Старый 23.06.2010, 14:26
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Может что-нибудь по-сложнее обсудим? Медиатор, стратегию, состояние или посетителя? Право, синглтоны уже оскомину набили.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 23.06.2010, 14:30
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 8  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Перестаньте делать синглтоны )) 21ый век, можно на мультитоны[1] переходить ^_^

[1] http://en.wikipedia.org/wiki/Multiton.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 23.06.2010, 14:45
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 9  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от dimarik Посмотреть сообщение
Может что-нибудь по-сложнее обсудим? Медиатор, стратегию, состояние или посетителя? Право, синглтоны уже оскомину набили.
Давайте)
Только, пожалуйста, не МВЦ)
__________________
Отряд Котовскага

Старый 23.06.2010, 23:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
А может лучше обсудить "как правильно жить без синглтонов"?
Потому что из-за этой сволочи половину классов в проекте уже отдельно не протестируешь , не говоря о том, что иногда просто не понятно что ждать от этой глобальной точки в данный момент, надеясь что ее никто не поменял нечаянно.


Последний раз редактировалось expl; 23.06.2010 в 23:16.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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