阅读 28

java备忘录模式

1532279-20190520190536920-1003913127.png

实体类用于信息存储,同时定义备份和还原的方法

//学生信息存储实体类
public class Student {
     //学生姓名,编号,所属班级
     private String sname;
     private String sid;
     private String className;
      
     //构造器
     public Student(String sname, String sid, String className) {
         super();
         this.sname = sname;
         this.sid = sid;
         this.className = className;
     }
     public String getSname() {
         return sname;
     }
     public void setSname(String sname) {
         this.sname = sname;
     }
     public String getSid() {
         return sid;
     }
     public void setSid(String sid) {
         this.sid = sid;
     }
     public String getClassName() {
         return className;
     }
     public void setClassName(String className) {
         this.className = className;
     }
     
     @Override
     public String toString() {
         return "姓名:"+sname+" "+"编号:"+sid+" "+"班级名称:"+className;
     }
     //定义一个备忘的方法
     public Memento memento() {
         return new Memento(this);
     }
     
     //恢复数据,恢复成备忘录记录的值
     public void recovery(Memento m) {
         this.sname=m.getSname();
         this.sid=m.getSid();
         this.className=m.getClassName();
     }
}
复制代码

备忘录类,保存学生实体类的信息

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
 
 //备忘录类
 public class Memento {
     private String sname;
     private String sid;
     private String className;
     
     //保存学生信息
     public Memento(Student s) {
         super();
         this.sname =s.getSname();
         this.sid = s.getSid();
         this.className = s.getClassName();
         //新建xml文件用来保存每一次备忘的内容
         Properties p=new Properties();
         p.setProperty("学生姓名", sname);
         p.setProperty("学生编号", sid);
         p.setProperty("班级名称", className);
         try {
             p.storeToXML(new FileOutputStream(new File("文件3.xml")), "测试文件","GBK");
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         }
         
     }
     
     public String getSname() {
         return sname;
     }
     public void setSname(String sname) {
         this.sname = sname;
     }
     public String getSid() {
         return sid;
     }
     public void setSid(String sid) {
         this.sid = sid;
     }
     public String getClassName() {
         return className;
     }
     public void setClassName(String className) {
         this.className = className;
     }
     
}
复制代码

管理者类,保持对备忘录类的引用,可以用list容器来存放多个备忘点

//管理者
public class Manager {
     //保持对备忘录类的引用
     private Memento memento;
     
     public Memento getMemento() {
         return memento;
     }

     public void setMemento(Memento memento) {
         this.memento = memento;
     } 
}
复制代码

客户端类

public class Client {
 
     public static void main(String[] args) {
         
         Manager m=new Manager();
         Student s=new Student("张三","123","软件一班");
        //信息打印
         System.out.println(s.toString());
         //备份
         System.out.println("-->进行备份---");
         m.setMemento(s.memento());
         
         //重置数据
         s.setSname("李四");
         s.setSid("456");
         s.setClassName("软件二班");
         System.out.println("-->数据发生改变----");
         System.out.println(s.toString());
         //恢复数据
         System.out.println("-->回到备份点----");
         s.recovery(m.getMemento());
         System.out.println(s.toString());
         
     } 
}
复制代码
文章分类
后端
文章标签