![]() |
Типизированный массив, расширяющийся при необходимости
Всем привет.
У меня есть массив одинаковых объектов, к примеру 10 мувиклипов, а мне нужно разместить на экране 15 таких мувиков из этого массива. Для этого нужно заполнить этот массив ещё 5 объектами этого же типа. Т.е нужно создать такую функцию, которая расширяла бы указанный массив, нужным типом данных ... понятно что можно внутри такой функции реализовать switch в котором будут указаны все типы, но может есть способ поэлегантнее? чтобы при появлении нового класса не надо было добавлять соответсвующий case ? Либо может как-то расширить класс Array или Vector так чтобы его можно было влюбой момент дополнить? Спасибо! |
По-моему в Array и так можно когда и куда угодно добавлять что угодно.
|
вроде есть метод один... getQualifiedClassName... вроде называется.
В параметры принимает объект. Получаете имя класса, потом получаете сам класс: getDefinitionByName Потом создаете экземпляры --- если я правильно понял, что нужно автору |
Цитата:
Код AS1/AS2:
Код AS1/AS2:
Ну или в более простом виде реализовать, типа как-нить так: Код AS1/AS2:
|
Да, вы можете это реализовать с помощью того, что я описал выше.
|
Цитата:
Состряпал тут для наглядности, может ещё кому пригодится: Код AS1/AS2:
|
Если вам, на этапе компиляции, известен класс который необходимо создать, то все эти танцы с
Код AS3:
|
А вам есть разница, писать
Код AS3:
Код AS3:
в первом случае всё намного легче и быстрее, new NeedClass и всё). Для второго советую вместо Код AS3:
Код AS3:
|
Может я что-то не понял, но не лучше ли в таком случае использовать Array?
Зачем тут Vector вообще? По-моему, все преимущества в скорости будут сведены на нет подобной хренью getDefinitionByName(getQualifiedClassName(NeedClass)) |
...тем более, что штатно это делается передачей параметром не имени класса или самого класса, а объекта-фабрики. Что и быстрее и гибче.
Изучаем паттерн Abstract Factory и будет счастье. |
Ну у фабрики собственно те же проблемы с добавлением нового типа объектов.
|
Цитата:
|
Я о том, что для каждого типа создаваемых объектов нужна своя конкретная фабрика.
|
Цитата:
|
Это создание нескольких классов вместо одной строчки.
|
Это создание нескольких правильных классов вместо одной кривой строчки.
И давайте, кстати, посмотрим, как выглядит Ваша "одна строчка" не в искусственных тепличных условиях, а в реальной жизни. Для вот такого класса, к примеру: Код AS3:
|
А как вы решите с помощью абстрактной фабрики задачу автоматического создания объекта при том, что класс создаваемого объекта на момент создания абстрактной фабрики еще не известен?
Я тоже могу сделать предположения которые выходят за рамки изначальной задачи. Как говорится делать надо не так как правильно :) А точнее правильно это не то, что соответствует каким-то стандартам и шаблонам. Правильно значит быстро и качественно с учетом поставленной задачи. |
Цитата:
Цитата:
Я Вам помогу, вот текст: Цитата:
|
Какая конкретно сигнатура будет у метода добавления?
|
Да, Сrazy, вы хороший вариант предложили.
Но в случае, если заранее известно, что конструкторы все таки не будут иметь параметров - проще написать одну корявую строчку: Код AS3:
Кстати, спасибо. До этого дня я не знал об абстрактной фабрике. Сейчас же нахожу ее крайне полезной. |
Цитата:
|
Всем спасибо за помощь!
Мне нужно чтобы массив заполнялся элементами указанного мной типа, мувиклипами, спрайтами и т.п. Тип задается через параметр. Я хочу сделать это через класс, расширить класс Array добавив в него функцию add(className:Class, num:int), чтобы он мог дополнять себя объектами className в количестве num объектов. - конструкотры не будут иметь параметров - на этапе компиляции класс известен Попытался составить свой класс, но не знаю как сделать чтобы он вел себя как обычный Array. Мне нужен обычный Array с функцией add, подскажите как должно выглядеть? Спасибо! Код AS3:
|
Crazy, спасибо за урок.(серьезно)
FinalBoss, ваш пример должен быть рабочим. |
Цитата:
ReferenceError: Error #1069: Не удалось найти свойство 0 в GArray; отсутствует значение по умолчанию. at Array$/_join() at Function/<anonymous>() at global/trace() at Main() |
Я никогда не пробовал расширять массив. :)
Попробуйте добавить модификатор dynamic своему классу. |
Цитата:
А так же спасибо всем участникам дискусии! |
Цитата:
|
| Часовой пояс GMT +4, время: 21:53. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.