and if each IAnalyzer implements a function called getAnalyzedProperty(), returning a string, and if each item (using an IItem interface, for example) implements a function called hasProperty(), receiving a string as parameter? So, you could check if the item has the "getProperty()" function the analyzer requires, at runtime, without having runtine errors... You could also have some getProperty( strProperty:String ):Object function, defined at IItem interface.
interface IAnalyzer { getAnalyzedProperty():String; } interface IItem { hasProperty( strProperty:String ):Boolean; getProperty( strProperty:String ):Object; } just a guess, andrei On Sat, Mar 22, 2008 at 11:39 AM, Jeroen Beckers <[EMAIL PROTECTED]> wrote: > Hi list! > > Situation: I have a class that analyzes stuff. There are different > analyzing > classes, such as "HeightAnalyzer", "WeightAnalyzer", "LevelAnalyzer", etc. > You can add an analyzer to the class by using > 'myClass.addAnalyzer(newAnalyzer:IAnalyzer)'. > As you can see, there is an IAnalyzer interface which all Analyzer's > implement. Every time you add an analyzer, it is added to the list using > the > Decorator pattern. (Every analyzer must analyze a list and pass it to the > next analyzing test) > > Now, the analyzer's analyze certain items. Every analyzer requires the > analyzed item to have a certain set of methods. The HeightAnalyzer > requires > a getHeight(), the LevelAnaylzer requires a getLevel(), etc. I want to > have > a different interface for each analyzer, so that I can easily add > analyzers > (+interfaces). > > If I want to analyze a list of items, those items must implement the > correct > interface, according to which analyzers you have added to the class. Fe: > > var myClass:AnalyzerBundle = new AnalyzerBundle(); > myClass.addAnalyzer(new HeightAnalyzer()); > myClass.addAnalyzer(new LevelAnalyzer()); > myClass.analyze(new Array(item1, item2, item3)); > > What I am looking for now, is a way to make sure that item1, item2 and > item3 > all implement the IHeightItem and ILevelItem interfaces. > > I've found a couple of ways to do this, but none of them seemed really > good > to me. One of them was to have every Analyzer keep track of the interface > associated with it, and check if they implement the correct interface, > once > the analyzer is called. But this would give ugly runtime errors... > I'm pretty sure that it can't be done at compile time, but if anyone > happens > to know some way (hack), or a better way for the runtime errors, please > tell > me :-). All ideas are welcome > > Ps: I've just made up all these names, my question is about the technique > to > be used, not about the project :) > _______________________________________________ > Flashcoders mailing list > Flashcoders@chattyfig.figleaf.com > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > _______________________________________________ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders