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:深度备忘,保证对象中的属性对象不会随着源发对象的改变而改变,参考原型模式中的深度拷贝。

  • 相关阅读:
    [转]HSPICE软件的应用及常见问题解决
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    Node.js开发Web后台服务
    mysql update 将一个表某字段设为另一个表某字段的值
    一个最简的Thinkphp3.2 操作Mongodb的例子
    MongoDB GUI( Robo 3T) Shell使用及操作
    Robomongo,Mongo可视化工具
    thinkphp mysql和mongodb 完美使用
    大型网站系统架构演化之路
    30个php操作redis常用方法代码例子
  • 原文地址:https://www.cnblogs.com/wxisme/p/4540682.html
Copyright © 2011-2022 走看看