1

Ich bin in AS3 zu arbeiten, aber ich denke, dies ist eine allgemeine Frage sein könnte, also werde ich es vage mehr umrahmen ...String stategy in Strategy-Muster

ich eine XML-Datei bin mit definieren Parameter für eine bestimmte Objektklasse, die das Strategie-Pattern implementiert. Es wird eine große Vielfalt an Objekten geben, und dies funktioniert für uns als eine Designer-freundliche Lösung zum Anpassen dieser Objekte. Da ich nur Zeichenfolgen in der XML-Datei definieren kann, kann jemand eine saubere Methode vorschlagen, um diese Zeichenfolge zu übernehmen und die richtige Strategie zu implementieren?

Ich hatte zwei erste Gedanken. Erstens, um die Zeichenfolge an den Konstruktor des Objekts zu übergeben, und dann einen Switch Case innerhalb des Objekts, das die richtige Strategie anwendet.

Zweitens, so legen Sie den Schalter außerhalb der Klasse in der Steuerung, die dann die richtige Strategie an den Konstruktor des Objekts übergibt.

Die zweite scheint wie die sauberere Version als dann die Objektklasse selbst ist nicht durch meine spezifische Implementierung betroffen. Aber keiner fühlt sich ganz richtig an.

Alle zusätzlichen Vorschläge wären willkommen!

Antwort

3

Sie möchten eine Art Factory-Designmuster, um die geeignete Klasse basierend auf einer Eingabezeichenfolge auszuwählen. Eine nette Anwendung davon ist die Registrierung, wo sich anwendbare Klassen mit einer Singleton-Registry-Klasse als für eine bestimmte Eingabe-Zeichenfolge geeignet "registrieren"; Die Factory selbst wird dann nur ein Suchvorgang von String zu registrierter Klasse. Einige Fallbacks müssen vorhanden sein, wenn sich keine Klasse für die angeforderte Eingabezeichenfolge registriert hat: Entweder handelt es sich um eine Ausnahme oder es gibt eine "Standard" -Implementierung, die verwendet wird, wenn keine spezifischere angewendet wird - letztere ist eine nette Fail-Soft-Option , aber nicht immer anwendbar.

Ein unvermeidliches Problem mit der Registrierung ist, wie man alle Klassen von Interesse findet und sicherstellen, dass sie sich registrieren (das ist besonders interessant für Plugin-Klassen); Die besten Lösungen dafür sind eher von der jeweiligen Sprache abhängig und ich bin mir leider nicht sicher, was AS3 in dieser Hinsicht liefert (oder wenn Sie überhaupt an einer solchen dynamischen Erweiterbarkeit interessiert sind).

Ein weiteres interessantes Problem mit der Registrierung ist "Konflikte" - was passiert, wenn mehr als eine anwendbare Klasse behauptet, die richtige für eine bestimmte Eingabe-String zu sein. "Last to Claim Wins" ist am einfachsten, aber oft zu einfach; Sie können jedes Klassenregister für mehrere Eingabezeichenfolgen mit einer bestimmten "Priorität" oder "Priorität" haben, oder sonst (nicht wirklich interessant auf Systemen, die nicht verteilt sind, aber entscheidend für verteilte Systeme ...) "Load Balance" unter allen anwendbare "Server" (Round-Robin oder auf raffiniertere Weise).

Sie werden bemerken, dass diese Lösungen Ihrem zweiten mehr ähneln als Ihrem ersten, aber der Hauptunterschied ist, dass anstelle eines spröden, starren, hartcodierten Schalters (ein OOP bete noire ;-) sie auf flexible Abbildungen angewiesen sind von String zu Klasse (oder Klasse-Konstrukt Methode, Delegat, & c, abhängig von Details der Implementierungssprache - zB in Java könnte man eine StrategyConstructing-Schnittstelle haben, jede Strategieklasse würde dann ihre eigene Hilfsklasse registrieren, die diese Strategie implementiert, wenn sie unterschreibt bis zur Registrierung).

0

ja, alex, den richtigen Weg wies darauf hin, ...

für Implementierungsdetails, können Sie einen Blick auf this post, die mit einem ähnlichen Problem befasst haben wollen ... meine Antwort enthält eine Beispiel-Implementierung zu erhalten begann mit ...

ich denke, Sie sollten eine Zeichenfolge < -> Instanz Mapping tun, da dies robuster ist ...Die Strategie sollte aus der Perspektive des anwendenden Objekts zustandslos sein und alle Eingaben von diesem Objekt erhalten. Auf diese Weise können Sie Strategien zur Laufzeit wechseln, da es nicht offensichtlich ist, Zustände des Objekts und der Strategie an beliebigen Punkten zu synchronisieren der Ausführung ...

greetz

back2dos

Verwandte Themen