设计模式 之 备忘录模式

 

下载 23种设计模式源码 :http://download.csdn.net/download/knight_black_bob/8936043

 


创建型模式,共五种:
工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式

结构型模式,共七种:
适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式

行为型模式,共十一种:
策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式

备忘录模式 状态模式 访问者模式 中介者模式 解释器模式

 

 

 

 

 

 

package 设计模式.备忘录模式;

import java.io.Serializable;
import java.util.Map;
import java.util.Map.Entry;

/**
 * @author baoyou  E-mail:curiousby@163.com
 * @version 创建时间:2015年7月24日 下午2:08:04 
 * des:
 */
public class Originator implements Serializable{

	private int id;
	private String name;
	private Map<String,String> map;
	private CLAZZ clazz;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Map<String, String> getMap() {
		return map;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	public CLAZZ getClazz() {
		return clazz;
	}
	public void setClazz(CLAZZ clazz) {
		this.clazz = clazz;
	}
	
	public  Memento reStore(){
		return  new Memento(this.id ,this, clazz);
	}
	 
	public  void  setMemento(Memento m){
	   this.id = m.getId();
	   this.name = m.getName();
	   this.map = m.getMap();
	   this.clazz = m.getClazz();
	}
	
	public  void  showInfo(){
		StringBuffer sb= new StringBuffer();
		sb.append("{");
		sb.append("\"id\":").append(id).append(",");
		sb.append("\"name\":\"").append(name).append("\",");
		if (map !=null) {
			 for(String key : map.keySet()){
				 sb.append("\"").append(key).append("\":\"").append(map.get(key)).append("\",");
			 }
		}
		if (clazz != null) {
			sb.append("\"clazz\":\"").append(clazz).append("\",");
		}
		sb.deleteCharAt(sb.length()-1);
		sb.append("}");
		System.out.println(sb.toString());
	}
	
}

 

package 设计模式.备忘录模式;

import java.util.HashMap;
import java.util.Map;

/**
 * @author baoyou  E-mail:curiousby@163.com
 * @version 创建时间:2015年7月24日 下午2:07:36 
 * des:
 */
public class Memento {

	
	private int id;
	private String name;
	private Map<String,String> map;
	private CLAZZ clazz;
	
	public Memento(int id ,Originator o, CLAZZ clazz) { 
		this.id = id;
		this.name = o.getName();
		Map <String , String > tempMap = new HashMap <String ,String>();
		if(o.getMap() != null ){
			for ( String key: o.getMap().keySet()) {
				tempMap.put(key, o.getMap().get(key) );
			}
		}
		this.map = tempMap;
		this.clazz =   clazz.clone();
	}
	
	 
	public int getId() {
		return id;
	} 
	public String getName() {
		return name;
	} 
	public Map<String, String> getMap() {
		return map;
	}

	public CLAZZ getClazz() {
		return clazz;
	} 
	
	
	
}

 

package 设计模式.备忘录模式;
/**
 * @author baoyou  E-mail:curiousby@163.com
 * @version 创建时间:2015年7月24日 下午2:12:31 
 * des:
 */
public class CLAZZ implements Cloneable{

	private int id;
	private String name; 
	public CLAZZ(int id, String name) { 
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	protected CLAZZ clone()  { 
		try {
			return (CLAZZ)super.clone();
		} catch (CloneNotSupportedException e) { 
			e.printStackTrace();
		}
		return null;
	}
	
}

 

	package 设计模式.备忘录模式;
/**
 * @author baoyou  E-mail:curiousby@163.com
 * @version 创建时间:2015年7月24日 下午2:07:47 
 * des:
 */
public class Caretaker {
	 private Memento memento;   
	 
	 public Memento getMemento() {  
		 return memento;    
	 }
	 
	 public void setMemento(Memento memento) {   
		 this.memento = memento;   
	 }
}

 

package 设计模式.备忘录模式;

import java.util.HashMap;
import java.util.Map;

/**
 * @author baoyou  E-mail:curiousby@163.com
 * @version 创建时间:2015年7月24日 上午11:29:41 
 * des:
 */
public class MementoTest {
	
	public static void main(String[] args) {
		
		Originator org = new Originator();
		org.setId(1);
		org.setName("baoyou");
		Map <String ,String> map = new HashMap <String ,String>();
		map.put("数学", "90");
		map.put("语文", "90");
		map.put("英语", "90");
		org.setMap(map);
		org.setClazz(new CLAZZ(1, "一年级"));
		org.showInfo();
		
		Caretaker ctk = new Caretaker();       
		ctk.setMemento(org.reStore());
		
		map.put("数学", "92");
		org.setMap(map);
		org.showInfo();
		
		org.setMemento(ctk.getMemento());
		org.showInfo();
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值