13.備忘錄模式
模式定義
備忘錄模式(Memento Pattern)模式的定義:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,以便以后當需要時能將該對象恢復到原先保存的狀態。該模式又叫快照模式,備忘錄模式屬于行為型模式。
模式解決的問題
備忘錄模式讓用戶回到之前的某個狀態,就像“后悔藥”一樣,穿越時空回到過去的某個狀態。
模式角色
- 發起人(Originator)角色:記錄當前時刻的內部狀態信息,提供創建備忘錄和恢復備忘錄數據的功能,實現其他業務功能,它可以訪問備忘錄里的所有信息。
- 備忘錄(Memento)角色:負責存儲發起人的內部狀態,在需要的時候提供這些內部狀態給發起人。
- 管理者(Caretaker)角色:對備忘錄進行管理,提供保存與獲取備忘錄的功能,但其不能對備忘錄的內容進行訪問與修改。
一、備忘錄角色
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Memento {private String state;
}
二、發起人角色
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Originator {private String state;public Memento saveStateToMemento(){return new Memento(state);}public void getStateFromMemento(Memento memento){state = memento.getState();}
}
三、管理者
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Storage {private List<Memento> mementos = new ArrayList<Memento>();
}
四、測試類
public class MementoTest {public static void main(String[] args) {Originator originator = new Originator();Storage storage = new Storage();originator.setState("狀態:第1關");storage.getMementos().add(originator.saveStateToMemento());originator.setState("狀態:第2關");storage.getMementos().add(originator.saveStateToMemento());originator.setState("狀態:第3關");storage.getMementos().add(originator.saveStateToMemento());System.out.println("當前"+originator.getState());System.out.println("退回到第2關");originator.getStateFromMemento(storage.getMementos().get(1));System.out.println("當前"+originator.getState());}
}