zoukankan      html  css  js  c++  java
  • 设计模式——备忘录模式

          备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。

      备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。

          简单的说备忘录模式就是在想让对象回到原来某个时间点的状态时,可以通过撤销(undo)来简单的实现。

          在备忘录模式中,源发器对象是要备忘的对象。备忘录对象用来备忘某个时间点的对象状态。负责人对象用来记录备忘的那个时间点。

          备忘录有;两个重要的目标:一个是存储系统关键对象的重要状态,二是维护关键对象的封装。

          看一个介绍:http://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html

           看一个Demo:

    /**
     * 源发器对象
     * @author wxisme
     *
     */
    public class Emp {
    	private String name;
    	private int age;
    	
    	public Emp(String name, int age) {
    		this.age = age;
    		this.name = name;
    	}
    	//数据恢复
    	public void recovery(EmpMemento emt) {
    		this.age = emt.getAge();
    		this.name = emt.getName();
    	}
    	//备忘
    	public EmpMemento memento() {
    		return new EmpMemento(this);
    	}
    	
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	
    
    }
    
    public class EmpMemento {
    	private String name;
    	private int age;
    	
    	public EmpMemento(Emp emp) {
    		this.age = emp.getAge();
    		this.name = emp.getName();
    	}
    	
    	
    	
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	
    }
    
    public class Taker {
    	private EmpMemento empm;
    
    	public EmpMemento getEmpm() {
    		return empm;
    	}
    
    	public void setEmpm(EmpMemento empm) {
    		this.empm = empm;
    	}
    	
    	
    }
    

     PS:深度备忘,保证对象中的属性对象不会随着源发对象的改变而改变,参考原型模式中的深度拷贝。

  • 相关阅读:
    InnoDB的锁机制浅析(二)—探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁)
    InnoDB的锁机制浅析(一)—基本概念/兼容矩阵
    InnoDB的锁机制浅析(All in One)
    JMS Java消息服务(Java Message Service)
    命名和目录接口 JNDI-The Java Naming and Directory Interface
    Jenkins系列教程之
    Jenkins系列教程之
    Jenkins系列教程之
    【小笔记】大数据量excel解析工具性能对比
    【小笔记】Activiti扩展数据库支持类型
  • 原文地址:https://www.cnblogs.com/wxisme/p/4540682.html
Copyright © 2011-2022 走看看