Zustandsmuster C # mit vorherigen Zuständen

7

Ich bin neu in der Zustandsmusterimplementierung in C #, könnten Sie einige Informationen zur Implementierung bereitstellen.

Ich refaktoriere eine Zustandsmaschine in C # mit Hilfe des Zustandsmusters. Derzeit enthält meine Zustandsmaschine 5 Zustände, und es ist nur möglich, durch die Zustände vorwärts oder rückwärts zu gehen, d. Von Zustand 1 müssen Sie zu Zustand 2, 3 und 4 gehen, um schließlich zu Zustand 5 zu gelangen.

Ich kann einfach weitermachen

%Vor%

was jedes Mal, wenn Sie vorwärts gehen wollen, einen neuen Zustand erzeugt, sobald alle von ihnen erstellt wurden und / oder Sie rückwärts gehen wollen, müsste ich zu denselben Zuständen gehen, nicht nur zu einer neuen. Wie kann ich das machen? Gibt es einen besseren Weg, es einfach zu machen?

    
Manolete 24.10.2011, 10:10
quelle

3 Antworten

10

Wenn Sie das klassische GoF-State-Muster implementieren, sind die State-Subklassen genau genommen dafür verantwortlich, die Zustandsübergänge zu kennen und auszuführen. Der Inhaber des Staates ist nicht für die Verwaltung der Übergänge verantwortlich, und ein großer Teil der Absicht des Musters besteht darin, das Zustandsübergangsverhalten in den Zustandsobjekten zu kapseln und somit für den Client an sie zu delegieren. Ich habe eine Factory eingeführt, die sicherstellt, dass es immer nur eine einzige Instanz jeder State-Klasse gibt, um sicherzustellen, dass die gleiche Instanz wiederverwendet wird, wenn man sich durch die States bewegt.

%Vor%     
Steve Rowbotham 24.10.2011, 13:43
quelle
10

Verwenden Sie den internen Stapel, um die vorherigen Status beizubehalten:

%Vor%

Wenn Sie Vorwärts- und Rückwärtszustände beibehalten möchten, erstellen Sie einen zusätzlichen Stapel:

%Vor%     
Mohamed Abed 24.10.2011 10:15
quelle
0

Haben Sie einen staatlichen Manager? Wenn ja, könnte man die Zustandsinstanzen halten. Durch die Entkopplung des Zustandsübergangswissens von den Staaten selbst lässt sich der Manager über den Übergang entscheiden. Der Manager prüft den Status, der den Übergang angefordert hat: Er bestimmt, dass es sich um den Status "Schritt 1" handelt, und gibt (oder erstellt) den Status "Status 2" zurück.

    
jro 24.10.2011 10:16
quelle