码迷,mamicode.com
首页 > 其他好文 > 详细

备忘录模式

时间:2016-02-27 09:45:39      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

重要程度:★★☆☆☆

一、什么是备忘录模式

保存对象的某个状态并可以恢复到该状态

二、补充说明

例子很多,如回退 ctri + z,回滚,ps恢复到操作历史的某一刻等等。。。

三、角色

备忘录角色:存储状态

发起人角色:创建备忘录,并利用备忘录存储自己的状态

负责人:管理备忘录

客户端

四、例子,JAVA实现

例子描述:显示一个对象的历史状态

备忘录角色

package com.pichen.dp.behavioralpattern.memento;

public class Memento {
    private String state;

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

    public String getState() {
        return state;
    }
}

发起人角色

package com.pichen.dp.behavioralpattern.memento;
public class State {

    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
    
    public Memento saveToMemento(){
        return new Memento(state);
    }
    
    public void restoreFromMemento(Memento memento){
        this.state = memento.getState();
    }
}

备忘录管理者

package com.pichen.dp.behavioralpattern.memento;

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

public class MementoMgt {

    private List<Memento> mementoList = new ArrayList<Memento>();

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

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

    public List<Memento> getMementoList() {
        return mementoList;
    }

}

客户端Main

package com.pichen.dp.behavioralpattern.memento;
public class Main {

    public static void main(String[] args) {
        State state = new State();
        MementoMgt mementoMgt = new MementoMgt();
        
        state.setState("state1");
        mementoMgt.add(state.saveToMemento());
        state.setState("state2");
        mementoMgt.add(state.saveToMemento());
        state.setState("state3");
        mementoMgt.add(state.saveToMemento());
        state.setState("state4");
        mementoMgt.add(state.saveToMemento());
        
        System.out.println("状态历史:");
        for(Memento m:mementoMgt.getMementoList()){
            System.out.println(m.getState());
        }
        
        System.out.println("当前状态:");
        System.out.println(state.getState());
        state.setState(mementoMgt.getMementoList().get(1).getState());
        System.out.println("恢复后的状态:");
        System.out.println(state.getState());
    }
}

结果打印:

状态历史:
state1
state2
state3
state4
当前状态:
state4
恢复后的状态:
state2

 

备忘录模式

标签:

原文地址:http://www.cnblogs.com/chenpi/p/5222287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!