請在后臺配置參數,參數名稱:topads
編程語言 php java

java設計模式-備忘錄模式Memen

java HTML我幫您 1年前  230次瀏覽
備忘錄模式(Memento Pattern)用于恢復對象的狀態到之前一個狀態。備忘錄模式屬于表現型。
備忘錄模式使用三種行為類。備忘錄包含對象恢復的狀態。Originator類在備忘錄中創建和存儲狀態。。我們創建Memento,Originator和CareTaker。
Original類是原始類,里面有需要保存的屬性value及創建一個備忘錄類,用來保存value值。Memento類是備忘錄類,Storage類是存儲備忘錄的類,持有Memento類的實例,該模式很好理解。CareTaker對象負責從備忘錄恢復對象狀態即Storage類是存儲備忘錄集合。直接看源碼:
package com.html580.memento;

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

class Memento {

private String value;

public Memento(String value) {
this.value = value;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}

class Original {

private String value;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public Original(){
}

public Original(String value) {
this.value = value;
}

public Memento createMemento() {
return new Memento(value);
}

public void restoreMemento(Memento memento) {
this.value = memento.getValue();
}
}

class Storage {

private Memento memento;

public Storage(Memento memento) {
this.memento = memento;
}

public Memento getMemento() {
return memento;
}

public void setMemento(Memento memento) {
this.memento = memento;
}
}

class CareTaker {
private List mementoList = new ArrayList();

public void add(Memento state) {
mementoList.add(state);
}

public Memento get(int index) {
return mementoList.get(index);
}
}

public class Client {
public static void main(String<> args) {

// 創建原始類
Original origi = new Original("html580");
// 創建備忘錄
Storage storage = new Storage(origi.createMemento());

// 修改原始類的狀態
System.out.println("初始化狀態為:" + origi.getValue());
origi.setValue("html580.com");
System.out.println("修改后的狀態為:" + origi.getValue());

// 回復原始類的狀態
origi.restoreMemento(storage.getMemento());
System.out.println("恢復后的狀態為:" + origi.getValue());


CareTaker careTaker = new CareTaker();
origi = new Original();
origi.setValue("設置值 #1");
origi.setValue("設置值 #2");
careTaker.add(origi.createMemento());
origi.setValue("設置值 #3");
careTaker.add(origi.createMemento());
origi.setValue("設置值 #4");
System.out.println("當前值: " + origi.getValue());
origi.restoreMemento(careTaker.get(0));
System.out.println("保存后的值: " + origi.getValue());
origi.restoreMemento(careTaker.get(1));
System.out.println("第二次保存的值: " + origi.getValue());
}
}
輸出結果:
初始化狀態為:html580
修改后的狀態為:html580.com
恢復后的狀態為:html580
當前值: 設置值 #4
保存后的值: 設置值 #2
第二次保存的值: 設置值 #3




發表評論

2017怎样手机上赚钱