其他分享
首页 > 其他分享> > 备忘录模式

备忘录模式

作者:互联网

需要让保存对象之前的状态,在必要时回退可以使用备忘录模式

(图:wiki)

示例

//备忘录
public class Memento {
    private String state;
    public Memento(String state){
        this.state =  state;
    }

    public String getState() {
        return state;
    }
}

//需要记录状态的对象
public class MasterGame {
    private String gameState;//游戏状态

    public Memento saveToMemento() {
        return new Memento(this.gameState);
    }

    public void restoreFromMemento(Memento memento) {
        this.setGameState(memento.getState());
    }

    public void setGameState(String gameState) {
        this.gameState = gameState;
        System.out.println(this.gameState);
    }

    public String getGameState() {
        return gameState;
    }
}

//用来储存多个备忘录状态
public class MementoStorage {
    private List<Memento> mementos = new ArrayList<>();

    public void addMemento(Memento memento) {
        mementos.add(memento);
    }

    public Memento get(int i) {
        System.out.println("获取第" + (i+1) + "次存储的状态");
        return mementos.get(i);
    }
}

//测试
public class Client {
    public static void main(String[] args){
        MasterGame game = new MasterGame();
        MementoStorage mementoStorage = new MementoStorage();
        game.setGameState("第一关");
        mementoStorage.addMemento(game.saveToMemento());
        game.setGameState("第二关");
        mementoStorage.addMemento(game.saveToMemento());
        game.setGameState("第三关");
        mementoStorage.addMemento(game.saveToMemento());
        game.restoreFromMemento(mementoStorage.get(0));
        game.restoreFromMemento(mementoStorage.get(1));
        game.restoreFromMemento(mementoStorage.get(2));
    }
}

运行结果

 

标签:String,模式,备忘录,game,gameState,mementoStorage,public,Memento
来源: https://www.cnblogs.com/camcay/p/12380165.html