通知
此博客运行在jpress系统上,如果你喜欢此博客模板,请加QQ群:1061691290(whimurmur模板/jpress插件),免费下载使用

行为模式-备忘录模式

4730人浏览 / 0人评论 | 作者:whisper  | 分类: 设计模式与算法  | 标签: 设计模式与算法  | 

作者:whisper

链接:http://proprogrammar.com:443/article/459

声明:请尊重原作者的劳动,如需转载请注明出处


  行为型模式又可以分成以下四类:第一类:通过父类与子类的关系进行实现。第二类:两个类之间。第三类:类的状态。第四类:通过中间类

  备忘录模式属于第三类,类的状态

  记录一个类的某个时刻的状态信息,在未来的某个时刻可以恢复原来的状态

package behavior.pattern.status.memento;
 
import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
 
import org.apache.commons.beanutils.PropertyUtils;
 
public class Originator {
    private int state1 = 0; 
    private String state2 = ""; 
    private Date state3 = new Date(); 
   
     
    public Memento createMemento() throws Exception{ 
        Map<String, Object> memento = PropertyUtils.describe(this);
        memento.remove("class");
        return new Memento(memento);
    } 
       
    public void restoreMemento(Memento memento) throws Exception{ 
        if(memento != null && memento.getStateMap() != null && memento.getStateMap().size() > 0)
        {
            for(Entry<String, Object> entry: memento.getStateMap().entrySet())
            {
                PropertyUtils.setProperty(this, entry.getKey(), entry.getValue());
            }
        }
    } 
    public int getState1() {
        return state1;
    }
 
    public void setState1(int state1) {
        this.state1 = state1;
    }
 
    public String getState2() {
        return state2;
    }
 
    public void setState2(String state2) {
        this.state2 = state2;
    }
 
    public Date getState3() {
        return state3;
    }
 
    public void setState3(Date state3) {
        this.state3 = state3;
    }
 
    public String toString(){ 
        return "state1="+state1+"state2="+state2+"state3="+state3; 
    }
}
package behavior.pattern.status.memento;
 
import java.util.Map;
 
public class Memento {
    private Map<String, Object> stateMap; 
     
    public Memento(Map<String, Object> map){ 
        this.stateMap = map; 
    } 
   
    public Map<String, Object> getStateMap() { 
        return stateMap; 
    } 
   
    public void setStateMap(Map<String, Object> stateMap) { 
        this.stateMap = stateMap; 
    }
}

 上面两个类一个是要保存状态的类,一个是保存状态信息的备忘录类

package behavior.pattern.status.memento;
 
import java.util.HashMap;
import java.util.Map;
 
public class Caretaker {
    Map<String, Memento> memMap = new HashMap<String, Memento>(); 
    public Memento getMemento(String index){ 
        return memMap.get(index); 
    } 
       
    public void setMemento(String index, Memento memento){ 
        this.memMap.put(index, memento); 
    }
}

   上面的类是管理状态的类,包括记录和恢复状态

  测试代码

package behavior.pattern.status.memento;
 
import java.util.Date;
 
public class Client {
    public static void main(String[] args) throws Exception{ 
        Originator ori = new Originator(); 
        Caretaker caretaker = new Caretaker(); 
        ori.setState1(111); 
        ori.setState2("强盛"); 
        ori.setState3(new Date()); 
        System.out.println("===初始化状态===\n"+ori); 
           
        caretaker.setMemento("001",ori.createMemento()); 
        ori.setState1(222); 
        ori.setState2("架构"); 
        ori.setState3(new Date()); 
        System.out.println("===修改后状态===\n"+ori); 
           
        ori.restoreMemento(caretaker.getMemento("001")); 
        System.out.println("===恢复后状态===\n"+ori); 
    }
}

   运行结果


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!