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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.03.2008, 16:09
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 51  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Идея понятна, но дело совершенно не в этом.
Прелесть синглетона в том, что можно его быстро переделать в обычный класс и обратно.
Собственно это одна из причин, по которой не стоит увлекаться статическими методами.
__________________
http://realaxy.com

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

Регистрация: Nov 2006
Сообщений: 223
Во.
Есть интерфейс:
Код:
package {
	public interface IDoer {
		function doSomething():void;
	}
}
Вот класс, который использует синглтон:
Код:
package {
	public class User {
		public function User() {
			var doer1:IDoer = new Singleton();
			var doer2:IDoer = new Singleton();

			doer1.doSomething();
			doer2.doSomething();
		}
	}
}
А вот непосредственно реализация синглтона:
Код:
package {

	public class Singleton implements IDoer {
		
		private var realDoer:IDoer;

		public function Singleton() {
		    realDoer = RealSingleton.getInstance();
		}

		public function doSomething():void {
			realDoer.doSomething();
		}
	}
}

internal class RealSingleton implements IDoer {

	private var counter:int = 0;
	private static var instance:RealSingleton;

	public static function getInstance():RealSingleton {
		if (!instance) instance = new RealSingleton();
		return instance;
	}

	public function doSomething():void {
		trace(counter+": Hello world!");
		counter++;
	}
}
Плюс такого подхода, в том, что никто извне не знает, что это синглтон.
Используют как обычный класс.
Таким образом, если мы решим отказаться от использования синглтона (например, потребуется несколько соединений к серверу), то меняем только один файл. Для остальных классов ничего не изменилось.

То есть уровень абстракции выше, переделка в обычный класс совершенно прозрачна.

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

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

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

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

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

Регистрация: Nov 2006
Сообщений: 223
Это называет ин-кап-су-ля-ци-я.
Чем меньше мы знаем о внутреннем устройстве, тем легче живётся и крепче спится.

Про класс мы знаем. Инстанциируем, используем.
А про то, что он реализован через синглтон - не знаем и знать не хотим.
И если когда-нибудь он волшебным образом перестанет быть синглтоном (с сохранением интерфейса, логики и функциональности), то нас это никак не будет волновать.

Хочу обратить внимание, что класс-пользователь не использует статические методы и не содержит никаких упоминаний getInstance().


Последний раз редактировалось WindWalker; 19.03.2008 в 16:37.
Старый 19.03.2008, 16:41
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 56  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
BlooDHounD, можно поподробнее, с моими цитатами?
__________________
http://realaxy.com

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

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Цитата:
Сообщение от Iv
BlooDHounD, можно поподробнее, с моими цитатами?
все цитаты чуть выше постами. перечитай сам, пожалуйста. а твои примеры я отношу к категории:
Цитата:
Сообщение от __etc
В абсолютном большинстве случаев
(с этой формулировкой ты соглаился)


WindWalker, мне всё равно как Вы это называете просто я не пониманию, зачем усложнять структуру приложения, даже если программист никогда не увидит внутренности по мне так проще вместо создания "непоймикакогосингтона" написать как-нить так:
Код:
		private static function $doSomething():void {
			realDoer.doSomething();
		}
		public function doSomething():void {
			$doSomething();
		}
и работает и быстрее, и нету никаких инстансов внутри.

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

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
BlooDHounD, мне блевать хочется от такого общения как сейчас с тобой.
Научись отстаивать свою точку зрения, а не прятаться за общими фразами.
__________________
http://realaxy.com

Старый 19.03.2008, 17:33
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 59  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Iv, необращай внимания на тех, кто до этого еще не дорос, а то зря только время потратиш... я хоть посмеялся, пока читал посты отдельных пользователей))

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

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

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

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

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


 


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


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