Pracując nad przeglądarką multimediów zauważyłem że trzeba wywoływać dynamicznie klasy i ich instancje. Pomyślałem że trzeba całkiem odejść od myślenia i pisania tradycyjnego kodu ActionScript 1.0 czy 2.0. W tym momencie trafiłem na fajny wpis na blogu Kelly Brown z jej przykładem
import flash.utils.getDefinitionByName;
private function addButton():void{
var className:String="mx.controls.Button";
var ClassReference:Class = getDefinitionByName(className) as Class;
var instance:Object = new ClassReference();
instance.label="Test"
this.addChild(DisplayObject(instance));
}
Jest więcej pisania kodu, ale kod jest bardziej elastyczny.
Podobnie rzecz sie ma z inspekcja kodu o czym pisze Eric Cancil
jego introspekcją czy refleksją za pomocą takiego kodu
import flash.utils.describeType;
var simpleInstance = new SimpleClass();
trace(describeType(simpleInstance));
Czasami też przydają się dynamiczne klasy. Są to klasy do których można dodawać nowe pola i metody po utworzeniu ich instancji.
dynamic class Person {
var name:String;
}
Person p= new Person();
p.name=”Joe”;
p.age=25;
p.printMe = function () {
trace (p.name, p.age);
}
p.printMe(); // Joe 25
Nie polecam jednak częstego stosowania dynamicznych klas. Są one bardzo mało wydajne.
Jak zrobić identyczny klon obiektu zamiast jego na nowo wywoływania ? Nie obejdzie sie z jego "zripowaniem" jak to pokazał niko na swoim blogu
poniedziałek, 13 sierpnia 2007
Dynamiczne tworzenie instancji
Autor: Michał Małaj o godzinie 09:59
Subskrybuj:
Komentarze do posta (Atom)
4 komentarze:
Dla mnie klasy dynamiczne są niezbyt przyjazne. Mozliwosc "znienacka" rozszerzenia danej klasy ( metoda, pole ) powoduje że projektowanie i OOP bierze w łeb na starcie. W UML masz klasę z 3 metodami, a w kodzie w róźnych miejscach dolepiasz kolejne 3 i masz bałagan. Tak się nie da moim zdaniem.
Mile przy mapowaniu z XML:
<myObj className="com.adobe.SomeClass"/>
Wydaje mi, ze lepiej byloby od razu zainteresowac sie czyms do IoC i dependency injection szczegolnie, ze juz istnieja kompletne rozwiazania dla AS3.
@ Radek: świetna rada, wezmę to pod uwagę. Myślę, ze przydałoby się jakieś wprowadzenie do tego tematu
IoC i DI w AS3
@ Sema: klasy dynamiczne są dla leniwych i dla tych którzy nie zaplanują sobie API aplikacji.
Prześlij komentarz