Andenken-Muster

Das Andenken-Muster ist ein Softwaredesignmuster, das die Fähigkeit zur Verfügung stellt, einen Gegenstand zu seinem vorherigen Staat wieder herzustellen (machen Sie über rollback auf).

Das Andenken-Muster wird mit zwei Gegenständen durchgeführt: der Schöpfer und ein Hausmeister. Der Schöpfer ist ein Gegenstand, der einen inneren Staat hat. Der Hausmeister ist dabei, etwas dem Schöpfer zu tun, aber will im Stande sein, die Änderung aufzumachen. Der Hausmeister bittet zuerst den Schöpfer um einen Andenken-Gegenstand. Dann tut es beliebige Operation (oder Folge von Operationen) es war dabei zu tun. Um zum Staat vor den Operationen zu wiederholen, gibt es den Andenken-Gegenstand dem Schöpfer zurück. Der Andenken-Gegenstand selbst ist ein undurchsichtiger Gegenstand (derjenige, der der Hausmeister nicht, oder wenn nicht, Änderung kann). Wenn man dieses Muster verwendet, sollte Sorge genommen werden, wenn der Schöpfer andere Gegenstände oder Mittel ändern kann - funktioniert das Andenken-Muster auf einem einzelnen Gegenstand.

Klassische Beispiele des Andenken-Musters schließen den Samen eines Pseudozufallszahlengenerators ein (es wird immer dieselbe Folge, danach wenn initialisiert, mit dem Samen-Staat erzeugen), und der Staat in einer Zustandsmaschine.

Beispiel

Das folgende javanische Programm illustriert den "aufmachen" Gebrauch des Andenken-Musters.

Import java.util. Liste;

Import java.util. ArrayList;

Klassenschöpfer {\

privater Schnur-Staat;

//Die Klasse konnte auch zusätzliche Daten enthalten, der nicht ein Teil des ist

//Staat hat im Andenken gespart.

öffentlicher leerer Satz (Schnur-Staat) {\

System.out.println ("Schöpfer: Das Setzen des Staates zu" + Staat);

this.state = Staat;

}\

öffentliches Andenken saveToMemento {\

System.out.println ("Schöpfer: Das Sparen zum Andenken.");

geben Sie neues Andenken (Staat) zurück;

}\

öffentliche Leere restoreFromMemento (Andenken-Andenken) {\

setzen Sie = memento.getSavedState fest;

System.out.println ("Schöpfer: Staat nach der Wiederherstellung vom Andenken:" + Staat);

}\

öffentliches statisches Klassenandenken {\

privater Endschnur-Staat;

öffentliches Andenken (Spannen stateToSave), {\

setzen Sie = stateToSave fest;

}\

öffentliche Schnur getSavedState {\

geben Sie Staat zurück;

}\ }\

}\

Klassenhausmeister {\

öffentliche statische leere Hauptsache (Schnur [] args) {\

Liste

Schöpfer-Schöpfer = neuer Schöpfer ;

originator.set ("State1");

originator.set ("State2");

savedStates.add (originator.saveToMemento );

originator.set ("State3");

//Wir können um vielfachen mementos bitten, und der wählen, dazu zu wiederholen.

savedStates.add (originator.saveToMemento );

originator.set ("State4");

originator.restoreFromMemento (savedStates.get (1));

}\}\

</Quelle>

Die Produktion ist:

Schöpfer: Das Setzen des Staates zu State1

Schöpfer: Das Setzen des Staates zu State2

Schöpfer: Das Sparen zum Andenken.

Schöpfer: Das Setzen des Staates zu State3

Schöpfer: Das Sparen zum Andenken.

Schöpfer: Das Setzen des Staates zu State4

Schöpfer: Staat nach der Wiederherstellung vom Andenken: State3

Dieses Beispiel verwendet eine Schnur als der Staat, der standardmäßig ein unveränderlicher Typ in Java ist. In echten Lebensdrehbüchern wird der Staat

seien Sie fast immer ein Gegenstand. In welchem Fall der Staat vor dem Stellen im Andenken geklont werden muss.

privates Andenken (Staatsstaat)

{\

//Staat muss vor dem Zurückbringen des geklont werden

//Andenken oder aufeinander folgende Anrufe, Andenken zu bekommen

//geben Sie eine Verweisung auf denselben Gegenstand zurück

this.mementoState = state.clone ;

}\</Quelle>

Links


Vereinigungen von Zeugen Jehovas / Charles Montagu, der 1. Graf Halifax
Impressum & Datenschutz