zoukankan      html  css  js  c++  java
  • 大话设计模式读书笔记(十五) 备忘录模式

    备忘录模式:

    备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将这个对象回复到原先保存的状态。

    模式备忘录类图:

    涉及角色:

    Originator(发起人):负责创建一个备忘录Memento,用以当前时刻它的内部状态,并可以使用备忘录回复内部状态。Originator可以根据需要决定Memento存储Originator的哪些内部状态。
    Memento(备忘录):负责存储Originator的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:
    Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator却可看到备忘录的宽接口,允许它访问返回到
    先前状态所需要的所有数据。
    Caretaker(管理者):负责备忘录Memento,不能对Memento的内容进行访问或者操作。

    Java 代码实现:

    //发起人类
    public class Originator {
    	//需要保存的属性,可以有多个
    	public String state;
    	public Memento createMemento(){
    		return new Memento(state);
    	}
    	public void setMemento(Memento memento){
    		state = memento.getState();
    	}
    	public String getState() {
    		return state;
    	}
    	public void setState(String state) {
    		this.state = state;
    	}
    	public void show(){
    		System.out.println(state);
    	}
    }
    

    //备忘录类
    public class Memento {
    	
    	private String state;
    	
    	public Memento(String state) {
    		this.state = state;
    	}
    	public String getState() {
    		return state;
    	}
    	public void setState(String state) {
    		this.state = state;
    	}
    }
    

    //管理者类
    public class Caretaker {
    	private Memento memento;
    	public Memento getMemento() {
    		return memento;
    	}
    	public void setMemento(Memento memento) {
    		this.memento = memento;
    	}
    }
    

    public class Main {
    	public static void main(String[] args) {
    		Originator o = new Originator();
    		//设置出事状态为on
    		o.setState("On");
    		o.show();
    		//备忘录保存状态
    		Caretaker c = new Caretaker();
    		c.setMemento( o.createMemento());
    		
    		//改变备忘录状态为Off
    		o.setState("Off");
    		o.show();
    		
    		//从备忘录中获取状态
    		o.setMemento(c.getMemento());
    		o.show();
    	}
    }
    

    很多问题看了代码自然明了,备忘录模式还是很简单的,使用非常方便。
    备忘录模式的优点:
    (1)将对象状态备份,便于在出现意外时进行状态回滚。
    (2)对象状态的副本交由管理器(Caretaker)管理,发起人无需管理状态的备份。而在还原状态时,又由发起人自己执行状态还原方法,外界无法获取发起人的备份状态信息从而保证了备份数据的安全性。
    备忘录模式的缺点:
    将对象状态备份会占用较多的系统资源。

  • 相关阅读:
    数据库路由中间件MyCat
    数据库路由中间件MyCat
    数据库路由中间件MyCat
    数据库路由中间件MyCat
    数据库路由中间件MyCat
    数据库路由中间件MyCat
    数据库路由中间件MyCat
    数据库路由中间件MyCat
    SQL Server 调用dll
    windows7 Sql server 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏的修复
  • 原文地址:https://www.cnblogs.com/xsyfl/p/6842507.html
Copyright © 2011-2022 走看看