備忘錄模式【行為模式】
阿新 • • 發佈:2018-12-23
備忘錄模式
Without violating encapsulation,capture and externalize an object's internal state
so that the object can be restored to this state later.
在不破壞封裝性的前提下,捕獲一個物件的內部狀態並將其外部化,這樣,該物件就可以在之後恢復到該狀態。
public class Memento { /** * 備忘錄模式: * Without violating encapsulation,capture and externalize an object's internal state * so that the object can be restored to this state later. * 在不破壞封裝性的前提下,捕獲一個物件的內部狀態並將其外部化,這樣,該物件就可以在之後恢復到該狀態。 */ @Test public void all() { final Boy boy = Boy.builder().state("happy").build(); // 基於目標物件建立備忘錄 final BoyMemento create = boy.createMemento(); // 改變物件的內部狀態 boy.changeState(); assertEquals("unhappy", boy.getState()); // 從備忘錄中恢復物件的狀態 boy.restoreMemento(create); assertEquals("happy", boy.getState()); } } /** * 1)需要捕獲內部狀態的物件 */ @Data @Builder class Boy{ private String state; public BoyMemento createMemento() { return BoyMemento.builder().state(state).build(); } public void restoreMemento(BoyMemento memento) { setState(memento.getState()); } public void changeState() { setState("unhappy"); } } /** * 2)備忘錄物件 */ @Data @Builder class BoyMemento{ private String state; }