![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
У вас может быть несколько таких объектов одного класса? Т.е. в разных частях программы разные такие списки с разными объектами одних и тех же классов? Если да, то dictionary лучший вариант.
А если от каждого класса создаётся только один объект, то это синглтон, и можно хранить ссылку на объект в самом классе. Вот так package { public class Singleton { public function Singleton() { } private static var _instance:Singleton; public static function get instance():Singleton { if (!_instance) _instance = new Singleton(); return _instance; } } } и пользовать соответственно потом .
__________________
:) |
|
|||||
|
Aquahawk, большое спасибо за информацию. Я знаю что такое синглтон
. Только не совсем понимаю какая мне разница - хранить список в синглтоне или как статический массив в каком-нибудь служебном классе.Например я оперирую 10-ю разными классами. Список только один. В этом списке по одному объекту каждого из этих 10-ти классов. Они не повторяются в списке. Я создал массив этих 10-ти экземпляров. Сделал этот массив как статическое свойство некоего класса. Именно статическое, так как этот список мне понадобится в любой момент и неизвестно где. Да - можно сделать синглтон, но суть не изменится от этого. А вот за пример с Dictionary - был бы вам очень благодарен. Читал в справке про эти словари - но там слишком скудно написано и всегда бросал эту затею, так как не совсем понятно что это такое и как его юзать..
__________________
Я мало чего умею, но зато хорошо умею учиться... Последний раз редактировалось HardCoder; 15.03.2012 в 01:22. |
|
|||||
package { import flash.display.Sprite; import flash.utils.Dictionary; public class Main extends Sprite { private var _dic:Dictionary; public function Main():void { this._dic = new Dictionary(); this._dic[ExampleClass1] = new ExampleClass1(); this._dic[ExampleClass2] = new ExampleClass2(); this._dic[ExampleClass3] = new ExampleClass3(); test1(); test2(); test3(); } public function test1():void { (_dic[ExampleClass1] as ExampleClass1).test(); } public function test2():void { (_dic[ExampleClass2] as ExampleClass2).test(); } public function test3():void { (_dic[ExampleClass3] as ExampleClass3).test(); } } } class ExampleClass1 { public function test():void { trace("obj1"); } } class ExampleClass2 { public function test():void { trace("obj2"); } } class ExampleClass3 { public function test():void { trace("obj3"); } } Dictionary это таблица где ключами являются сами объекты, выражаясь в терминах низкоуровневых языков, ключом является адрес ключевого объекта, а значение тоже объект. Но поскольку в as класс представлен в рантайме в виде объекта типа Class то всё хорошо работает. Добавлено через 5 минут А хранить я вам предлагал не список в синглтоне, а вообще не делать список. Если у вас десять таких классов то сделать каждого из них синглтоном и пусть он сам себе ссылку на свой объект и хранит. Вообще без списка, нужен объект этого класса, у него и взяли. Добавлено через 6 минут но словарь лучше, больше возможности для расширения.
__________________
:) Последний раз редактировалось Aquahawk; 15.03.2012 в 01:44. |
|
|||||
|
Aquahawk, спасибо большое. То есть, если у меня есть список экземпляров некоторых классов, то с помощью дикшнери я могу вытащить любой экземпляр по названию класса?
this._dic = new Dictionary(); this._dic[ExampleClass1] = new ExampleClass1(); this._dic[ExampleClass2] = new ExampleClass2(); this._dic[ExampleClass3] = new ExampleClass3(); trace(_dic[ExampleClass1]); Только вот интересно, что будет если объекты повторятся?
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
в результате этих двух строк в словаре будет одна запись с одним объектом, последним. Ссылка на тот объект который был там до этого будет потеряна и объект будет съеден GC если на него больше нет нигде ссылок. Короче дважды создадим объект, но в словаре окажется только последний. Если хочестся много объектов, то можно сгородить словарь векторов.
__________________
:) |
|
|||||
package { import flash.display.Sprite; import flash.utils.Dictionary; public class Main extends Sprite { private var _dic:Dictionary; public function Main():void { this._dic = new Dictionary(); this._dic[ExampleClass1] = new Vector.<ExampleClass1>(); (this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1()); (this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1()); this._dic[ExampleClass2] = new Vector.<ExampleClass2>(); (this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2()); (this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2()); (this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2()); this._dic[ExampleClass3] = new Vector.<ExampleClass3>(); (this._dic[ExampleClass3] as Vector.<ExampleClass3>).push(new ExampleClass3()); this.test1(); this.test2(); this.test3(); } public function test1():void { for each (var exObj:ExampleClass1 in this._dic[ExampleClass1]) { exObj.test(); } } public function test2():void { for each (var exObj:ExampleClass2 in this._dic[ExampleClass2]) { exObj.test(); } } public function test3():void { for each (var exObj:ExampleClass3 in this._dic[ExampleClass3]) { exObj.test(); } } } } class ExampleClass1 { public function test():void { trace("obj1"); } } class ExampleClass2 { public function test():void { trace("obj2"); } } class ExampleClass3 { public function test():void { trace("obj3"); } }
__________________
:) Последний раз редактировалось Aquahawk; 15.03.2012 в 02:02. |
|
|||||
this._dic[ExampleClass1] = new Vector.<ExampleClass1>(); (this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1()); (this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1()); this._dic[ExampleClass2] = new Vector.<ExampleClass2>(); (this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2()); (this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2()); (this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2()); this._dic[ExampleClass3] = new Vector.<ExampleClass3>(); (this._dic[ExampleClass3] as Vector.<ExampleClass3>).push(new ExampleClass3());
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|