• 设计模式——备忘录模式


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

  • 相关阅读:
    PHP观察者模式 (转)
    PHP单例模式 (转)
    PHP解决并发问题的几种实现(转)
    php结合redis实现高并发下的抢购、秒杀功能 (转)
    使用 redis 减少 秒杀库存 超卖思路 (转)
    mysql视图学习总结(转)
    mysql 存储过程
    PHP中的魔术方法和关键字
    bzoj3462DZY Loves Math II
    bzoj1453[Wc]Dface双面棋盘
  • 原文地址:https://www.cnblogs.com/wxisme/p/4540682.html
Copyright © 2020-2023  润新知