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

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

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

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
По умолчанию паттерн [Singleton]

Google говорит:
Цитата:
порождающий паттерн, который гарантирует, что для определенного класса будет создан только один объект
Меня'ж одно интересует, объект только одного класса может быть создан один раз ?(также предоставит к этому объекту точку доступа.) или же создавать объекты и других классов где также можно обращаться из любого места.
Конечно же я не говорю что бы все объекты создавать так что'б иметь точку доступа из любого места а лишь те которые действительно нужны.
p.s. У меня такое ассоциация складывается что Singleton должен создавать строго один объект класса, так что, кто что скажет ?

Старый 29.01.2017, 20:04
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Если я правильно понял вопрос, то ответ: можете оформлять как синглтон хоть один, хоть пять, хоть все классы, если надо.
"Паттерн" не означает, что ему подчиняется весь проект. Это просто шаблон решения какой-то задачи. В данном случае это просто способ организовать синглтон. Синглтон это не всё приложение. Это всего-лишь один объект, который должен отвечать определенным требованиям, чтобы реализовать синглтон. А сколько таких объектов разных классов будет в проекте, зависит от необходимостей проекта.
__________________
Reality.getBounds(this);

Старый 29.01.2017, 20:11
zackscript вне форума Посмотреть профиль Отправить личное сообщение для zackscript Найти все сообщения от zackscript
  № 3  
Ответить с цитированием
zackscript
 
Аватар для zackscript

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
Ну теперь ясно, а то я думал что только один объект создается и он является нечто особенным , спасибо Wolsh .
Кстати с прошедшим Вас

Добавлено через 2 часа 27 минут
Только начал а уже ошибка

Код AS3:
package 
{
	import flash.display.Sprite;
	import Main
 
	public class OtherClass extends Sprite 
	{
 
		public function OtherClass () 
		{
		   Main.instance.message();
		}	
	}
}
Главный класс

Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import OtherClass;
 
	public class Main extends Sprite 
	{
		private static var _instance:Main;
 
		private var _txt:TextField;
		private var _other_class:OtherClass;
 
		public function Main() 
		{
			stage ? init() : addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			if (_instance) throw new Error ("Class is singleton!");
 
			_other_class = new OtherClass ()
		}
		public function message ():void
		{
			_txt = new TextField()
			_txt.text = "OK"
			_txt.x = 400;
			_txt.y = 300;
			addChild (_txt);
		}
		static public function get instance ():Main
		{
			if (!_instance) _instance = new Main ();
 
			return _instance;
		}
 
	}
 
}

Старый 30.01.2017, 00:31
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
У Вас же сначала [автоматически] создается экземпляр Мейн, но он НЕ записывается в переменную _instance.
Поэтому, когда _other_class обращается к геттеру instance(), тот создает новый экземпляр Мейн и записывает его в _instance. Итак, Вы уже получили 2 экземпляра Мейн, а это неправильно.

Добавлено через 6 минут
Цитата:
а то я думал что только один объект создается и он является нечто особенным
Именно так. Только один, и в этом его особенность.
Возможно, Вам надо как-то переформулировать первый вопрос, потому что изложен он очень путано.
Смысл синглтона именно и есть в том, что Класс не позволяет создавать более одного экземпляра ("объекта") ЭТОГО Класса. И дает доступ к этому экземпляру через свое статическое свойство. Поскольку сам Класс по определению может быть только один, то и его свойство ссылается точно на один экземпляр, откуда бы Вы к нему не обратились.
__________________
Reality.getBounds(this);

Старый 30.01.2017, 00:45
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 5  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
import Main
import OtherClass;
А в этом нет ошибки?

А какой смысл делать Main синглтоном вообще? Он ведь и так синглтон. Разве можно создать больше одного экземпляра Main?
Стало интересно, попробовал. Да, действительно возможно.

Код AS3:
package com.zackmercury.test
{
	import flash.events.Event;
	import flash.display.Sprite;
	/**
	 * ...
	 * @author ZackMercury
	 */
	public class Main extends Sprite 
	{
 
		public function Main() 
		{
			trace(1);
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			if (Math.random() > 0.5)
				stage.addChild(new Main());
		}
 
	}
 
}
Код:
1
1
Как бы то ни было, не представляю, где это пригодится.
Мейн-синглтон. Он - корень проекта. Кто додумается создавать руками экземпляры Main за исключением внешних SWF?)
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 30.01.2017 в 01:04.
Старый 30.01.2017, 08:51
zackscript вне форума Посмотреть профиль Отправить личное сообщение для zackscript Найти все сообщения от zackscript
  № 6  
Ответить с цитированием
zackscript
 
Аватар для zackscript

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
Цитата:
А какой смысл делать Main синглтоном вообще?
Это ради эксперимента , в действительности так не будет

Добавлено через 12 минут
Цитата:
а то я думал что только один объект создается и он является нечто особенным
Не-нет Вы меня не так поняли , я согласен что строго нужно создавать один экземпляр , просто я думал в singleton'е нельзя создавать ( более одного экземпляра ) и других классов.

Добавлено через 1 час 35 минут
Прошу помочь ибо я в логике в своем коде запутался.
По идее должен появится текст ну вот в чем подвох я не пойму, хотя и ошибок то нет.

Главный класс
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import OtherClassA;
	import OtherClassB;
 
	// author zackscript
 
	public class Main extends Sprite 
	{
		private var _classA:OtherClassA;
 
		public function Main() 
		{
			stage ? init() : addEventListener(Event.ADDED_TO_STAGE, init);	
		}
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			this._classA = new OtherClassA ()
			addChild (this._classA)
		}
	}
}
Класс А
Код AS3:
package 
{
	import flash.display.Sprite;
	import OtherClassB;
 
	public class OtherClassA extends Sprite 
	{
 
		public function OtherClassA () 
		{
		   super();
 
		   OtherClassB.instance.message ();  
		}	
	}
}
Класс B

Код AS3:
package 
{
    import flash.display.Sprite;
	import flash.text.TextField;
 
    public class OtherClassB extends Sprite 
	{
        private static var _instance:OtherClassB
 
		private var _txt:TextField;
 
        public function OtherClassB() 
		{
            super();
 
            if (_instance) throw new Error("Class is singleton!");
        }
		public function message ():void
		{
			_txt = new TextField ();
			_txt.text = "Hello Main"
			_txt.x = 400;
			_txt.y = 300;
			addChild (_txt);
		}
        static public function get instance():OtherClassB
		{
            if (!_instance) _instance = new OtherClassB ();
            return _instance;
        }
    }
}


Последний раз редактировалось zackscript; 30.01.2017 в 12:03.
Старый 30.01.2017, 12:10
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 7  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
поправил
Код AS3:
package 
{
    import flash.display.Sprite;
    import OtherClassB;
 
    public class OtherClassA extends Sprite 
    {
 
        public function OtherClassA () 
        {
           super();
 
           OtherClassB.instance.message ();  
           addChild(OtherClassB.instance);
        }   
    }
}

Старый 30.01.2017, 12:18
zackscript вне форума Посмотреть профиль Отправить личное сообщение для zackscript Найти все сообщения от zackscript
  № 8  
Ответить с цитированием
zackscript
 
Аватар для zackscript

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
Благодарю, я всегда думал что в классе А не надо добавлять в список отображения ведь это уже было проделано в классе В , но теперь я буду знать.

Создать новую тему Ответ Часовой пояс 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.