備忘錄模式(Memento)

備忘錄模式git

一. 備忘錄模式

1.1 定義

  • 在不破壞封閉性的前提下,捕獲一個對象的內部狀態,並在該對象以外保存這個狀態。這樣之後就可將該對象恢復到原先保存的狀態.

1.2 角色

  • 備忘錄(Memento):用於存儲發起者對象的內部狀態.
  • 發起者(Orginator):建立備忘錄,記錄或恢復自身狀態.
  • 管理者(CareTaker):負責管理備忘錄.

二. 具體實現

2.1 建立備忘錄類

public class Memento {
        private String state;
        public Memento(String state){
            this.state = state;
        }
        public String getState() {
            return state;
        }
    }

2.2 建立發起者類

public class Originator {
        private String state;
        public void setState(String state) {
            System.out.println("state changed : " + state);
            this.state = state;
        }
        public Memento save(){
            return new Memento(state);
        }
    }

2.3 建立管理者類

public class CareTaker {
        private Memento memento;
        public void save(Memento memento){
            System.out.println("Memento save ..." + memento.getState());
            this.memento = memento;
        }
        public Memento read(){
            System.out.println("Memento read ..." + memento.getState());
            return memento;
        }
    }

2.4 調用

public static void main(String[] args) {
        Originator originator = new Originator();
        CareTaker careTaker = new CareTaker();
        originator.setState("1");
        careTaker.save(originator.save());
        originator.setState("2");
        careTaker.read();
    }

2.5 輸出

state changed : 1
    Memento save ...1
    state changed : 2
    Memento read ...1

三. 優缺點

3.1 優勢

  • 能夠恢復到以前的狀態.

3.2 缺點

  • 耗費資源.

四. 源碼

https://github.com/Seasons20/DisignPattern.git
相關文章
相關標籤/搜索