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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 25.12.2007, 10:56
f3ath вне форума Посмотреть профиль Отправить личное сообщение для f3ath Найти все сообщения от f3ath
  № 20  
f3ath

Регистрация: Dec 2007
Сообщений: 8
Фабрика
Код:
class Factory
/*
	Factory class

example:

//create factory object for class myClass
// myClass.id - unique identifier of myClass instances
var myFactory = Factory.getFactoryFor('myClass', 'id');

//create myClass object
var myObject = myFactory.create(123);
// myObject is now instance of myClass
// myObject.id == 123

var myObject1 = myFactory.create(123);
// myObject1 is alias of myObject
// myObject1.id == myObject.id == 123

var myObject2 = myFactory.create(321);
// myObject2.id = 321
// myObject2 != myObject1
*/
{
	var className:String;
	var idName:String;
	var cache:Array;
	static var selfCache:Array;
	
	private function Factory(className:String, idName:String)
	{
		this.className = className;
		this.idName = idName;
		this.cache = new Array;
	};
	
	public static function getFactoryFor(className:String, idName:String)
	{
		if(!selfCache[className])
		{
			if(!selfCache) selfCache = new Array;
			selfCache[className] = new Factory(className, idName);
			if(!selfCache[className]) trace('ERROR: can not create Factory');
		}
		return selfCache[className];
	}

	private function safeNew(className)
	{
		var obj = new [className]; // create object
		if(!obj) trace("ERROR: can not instantiate '"+className+"' object"); // error
		return obj;
	}
	
	public function create(initData)
	{
		var obj:Object;
		if(this.idName) // id field specified
		{// use cache
			if(this.cache[initData[this.idName]]) // found in cache
			{ // return cached object
				return this.cache[initData[this.idName]];
			}
			else
			{ // create instance
				this.cache[initData[this.idName]] = this.safeNew(this.className); // save in cache
			};
			obj = this.cache[initData[this.idName]];
		}
		else // id field not specified
		{ // no cache
			obj = this.safeNew(this.className);
		};
		var foo:String; // iterator
		for(foo in initData)
		{
			obj[foo] = initData[foo]; // assign property
		};
		return obj;
	}
}

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

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

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


 


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


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