Latest web development tutorials

Memento Wzór

Tryb Memo (Memento deseń), aby zapisać stan obiektu w celu przywrócenia obiektu w odpowiednim czasie. wzory uzupełniające należą wzorców zachowań.

wprowadzenie

Zamiar: Bez naruszania hermetyzację przechwytywania wewnętrzny stan obiektu i zapisać stan na zewnątrz obiektu.

Głównie do rozwiązania: model jest tak zwany protokół bez zniszczenia opakowania, uchwycić wewnętrzny stan obiektu i zapisać stan poza obiektem, tak że obiekt może być później przywrócone do wcześniej zapisanego stanu.

Kiedy stosować: wiele razy, zawsze muszą rejestrować wewnętrzny stan obiektu, cel ten sposób jest, aby użytkownicy, aby anulować niepewne lub niewłaściwe działanie, może być przywrócona do swojego pierwotnego stanu tak, że on "żałuję" do jedzenia.

Jak naprawić: notatka na klasy przeznaczone do przechowywania stanu obiektu.

Klucz kod: klienci NIE para z klasy notatki, w połączeniu z klasą zarządzania notatki.

Przykłady zastosowań: 1, później tego żałował.2, podczas odtwarzania archiwum gier. 3, Okna Lane ctrl + Z. 4, czyli w plecy. 4, baza danych zarządzania transakcjami.

Zalety: 1, aby zapewnić użytkownikom taki sposób, aby przywrócić stan mechanizmu, który pozwala użytkownikom na bardziej wygodne, aby powrócić do historii państwa.2, w celu osiągnięcia pakiet informacji, dzięki czemu użytkownik nie musi się martwić o stan zachowania szczegółach.

Wady: zużywają zasoby.Jeśli zmiennych członkiem klasy także jest zobowiązany do podjęcia stosunkowo duże zasoby, i za każdym razem zapisać pochłonie pewną ilość pamięci.

Scenariusze użycia: 1, potrzeba zapisu / przywrócenia właściwego stanu danych tematycznych.2, przedstawia operację wycofania.

Uwaga: 1, w celu spełnienia zasady Demeter, również dodać notatkę zarządzania klasy.2, w celu zaoszczędzenia pamięci, można użyć trybu + notatki modelu prototypowego.

realizacja

Tryb Memo wykorzystuje trzy klasyMemento,pomysłodawcą idozorcy.Memento zawierający obiekt do remontu w państwie. Pomysłodawca Memento obiekt jest tworzony i przechowywany w stanie. Obiekt Dozorca jest odpowiedzialny za przywrócenie obiektów ze stanu Memento.

MementoPatternDemo,nasze zajęcia demonstracyjne wykorzystującedozorcyipomysłodawcaobiekt, aby wyświetlić stan ożywienia obiektu.

Protokół wzór diagram UML

Etap 1

Utwórz klasę Memento.

Memento.java

{public class Memento
   prywatny Stan String;

   Memento publicznych (stan String) {
      this.state = stan;
   }

   public String getstate () {
      stan powrotu;
   }	
}

Etap 2

Tworzenie klasy stworzyła.

Originator.java

{public class Pomysłodawca
   prywatny Stan String;

   public void setstate (stan String) {
      this.state = stan;
   }

   public String getstate () {
      stan powrotu;
   }

   publicznego Memento saveStateToMemento () {
      powrót nowego Memento (państwa);
   }

   public void getStateFromMemento (Memento Memento) {
      state = Memento.getState ();
   }
}

etap 3,

Tworzenie klasy dozorcy.

CareTaker.java

import java.util.ArrayList;
import java.util.List;

public class dozorca {
   Lista prywatna <Memento> mementoList = new ArrayList <Memento> ();

   public void add (stan Memento) {
      mementoList.add (państwa);
   }

   Memento publicznej get (int index) {
      powrót mementoList.get (indeks);
   }
}

Etap 4

Użyjdozorcyipomysłodawcaobiektów.

MementoPatternDemo.java

{public class MementoPatternDemo
   public static void main (String [] args) {
      Pomysłodawca pomysłodawcą = new Pomysłodawca ();
      Dozorca dozorca dozorca = new ();
      originator.setState ( "State # 1");
      originator.setState ( "State # 2");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "State # 3");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "State # 4");

      System.out.println ( "Current State:" + originator.getState ());		
      originator.getStateFromMemento (careTaker.get (0));
      System.out.println ( "Pierwszy zapisany stan:" + originator.getState ());
      originator.getStateFromMemento (careTaker.get (1));
      System.out.println ( "Drugi zapisany stan:" + originator.getState ());
   }
}

Etap 5

Sprawdź, czy wyjście.

Aktualny Stan: Stan # 4
Pierwszy zapisany Stan: Stan # 2
Drugi zapisany Stan: State # 3