Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-09-2006, 00:24   #1 (permalink)
JoH
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 99
Frage zum Factory-Pattern

Hi,

in meinem GUI-Framework verfügen alle Komponenten über ein Attribut style vom Datentyp IStyle.
IStyle ist ein Interface, dass ledeglich die Methode draw() vorschreibt.

Damit ist das Zeichnen der Komponenten schön "wegdelegiert".

Dann hab ich noch das Decorator-Pattern angewendet um einen Style um schraffierte Flächen oder Highlights zu erweitern.

Derzeit wende ich das z.B. so an:
var style : IDrawable = new SimpleStyle(_borderColor, _fillColor, _alpha);
style = new StrokeDecorator(style, _strokeColor);
style = new HighlightDecorator(style, _highlightColor);

Komfortabel wäre jetzt natürlich eine Klasse, die mir nach meinen Anforderungen einen dekorierten Style zurückgibt.

Factory-Pattern denk ich mir, weiss aber nicht welches und wie ich es in diesem Fall am besten nutze :/.

Vielleicht hat jemand von euch schon Erfahrung damit und kann mir nen Denkanstoss geben.
JoH ist offline   Mit Zitat antworten
Alt 16-09-2006, 09:15   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ich würde einfach eine Klasse bauen, die standardmäßig einen SimpleStyle zurückliefert und bei der du mit Settern für strokeColor und highlightColor die Benutzung von Decorators triggerst.

mf.r
bokel ist offline   Mit Zitat antworten
Alt 16-09-2006, 10:37   #3 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
xervus,

das factory pattern impliziert einen solche verwendung, um ein definiertes objekt zurück zu liefern:
PHP-Code:
deineFactory.createAnObject('objectCanonial'); 
damit allein sollte sie wissen, was sie zu tun hat. das bedeutet aber in deinem fall imho, dass du eine reihe von von canonials bräuchtest, um alle kombinationen mitsamt decoratorn abzudecken.

ich würde in diesem fall die createAnObject()-methode um einen array parameter erweitern, mit hilfe derer du die zu verwendenden decorator beim aufruf mitgeben kannst - ('objectCanonial':String, [Decorator1, Decorator2, ...]:Array). die verwendung wäre dann wie folgt:
PHP-Code:
deineFactory.createAnObject('objectCanonial', [StrokeDecoratorHighlightDecorator]);
deineFactory.createAnObject('objectCanonial', []); 
cheers, thomas
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Alt 16-09-2006, 12:20   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Um mein Posting oben etwas klarer zu machen, hier mal eine mögliche Anwendung der (gedachten) StyleFactory.

Code:
    var myStyleFactory = new StyleFactory();var defaultStyle : IDrawable = myStyleFactory.createStyle();myStyleFactory.setBorderColor( 0xff0000 );var styleMitRotemRand : IDrawable = myStyleFactory.createStyle();myStyleFactory.setStrokeColor( 0x00ff00 );var decoratedStyle : IDrawable = myStyleFactory.createStyle();

Im letzten Fall erzeugt die Factory halt einen Style mit einem StrokeDecorator.

@elysian: Mit Settern vermeidest du die kombinatorische Explosion. Die Decorator-Klassen bei der Erstellung mitzugeben, läuft der Idee des FactoryPatterns irgendwie zuwieder. Du willst die Implementations-Klassen ja gerade nicht kennen müssen. Nur die Factory und das Interface sollen öffentlich bekannt sein.


mfg. r

Geändert von bokel (16-09-2006 um 12:38 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 17-09-2006, 13:34   #5 (permalink)
Supermassive
 
Benutzerbild von elysian
 
Registriert seit: Aug 2004
Ort: Frankfurt, Bornheim
Beiträge: 861
@bokel: ...stimmt allerdings. da hast du recht.

cheers, thomas
__________________
Personal » amenity*blogging » elysian.de » Flexpertise - Enterprise Flex Collaboration
Networks » Xing » ColdFusion Community
Everything Cairngorm »
cairngormdocs.org
elysian ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele