java设计模式(十八)--备忘录模式
2017-08-23 00:00
337 查看
对于备忘录模式,我解释完之后,大家一定会对这种模式感兴趣的,其实他就像我们玩的单机游戏一样,我们的游戏存档用的就是这种备忘录模式,我们每次进入游戏可以随便载入某一个存档,从这个存档所存储的状态开始进行游戏,让我们玩游戏时有后悔药所吃。
网络上的专业解释:
此模式保存一个对象的某个状态,以便在适当的时候恢复对象,他在不破坏封装性的前提下,获取对象的某些状态,并在这个对象之外保存这个对象。
实例:我们用备忘录模式完成对游戏人物的位置和等级的存储。
以下是我对此实例完成的类图:
以下是我对此实例完成的编码:
1.编写存档信息类,里面包括各个存档所包含的信息
2.编写存档类,其中提供方法实现对存档信息类中数据的显示(实现对存档信息的封装)
3.编写存档的管理类(用于实现对存档的各种操作)
4.测试类(用于测试存档是否可以正常使用)
5.后台输出
通过我为大家编写的代码来看,对于我所做的存档信息类Memento来书,我没有动用他其中的任何方法,符合:迪米特原则(在最后给大家解释这个原则),而是在其他类中编写了访问这个类中方法的方法,这就是这个模式的优点:实现了对存档信息类的封装,使用户不会知道状态保存的细节。
还有一优点就是:这样的模式使用户可以恢复状态,就像一键还原一样,通过一个时间线索将某个软件返回到当时的各种状态。
当然,我们每次存储一次记录都会产生一文件,下一次通过载入这个文件来实现状态恢复,这样也就是说:我们每一次保存都会占用一定的内存,存储文件越多,浪费的资源也会相应增长,当然,这也与每次保存的数据的属性多少有关系。
迪米特原则:
又叫最少知识原则,顾名思义,就是知道的越少越好的意思,这是为啥呢?首先,如果两个类之间没有什么直接关系的话,那就让他们发生不了直接的相互作用,这样他们对对方就不了解了,但是,如果一个类要用到另一个类的方法的话要咋办呢?我们要通过第三个类来连接他们俩,这样如果这两个类的内容修改的话,那对这个系统造成的影响是最低的,如果每两个类之间都有着密切的关系,到了最后系统维护的时候那就都乱了。
我感觉他和”松耦合”是差不多的意思,都是为了实现代码的高复用性和高扩展性。
网络上的专业解释:
此模式保存一个对象的某个状态,以便在适当的时候恢复对象,他在不破坏封装性的前提下,获取对象的某些状态,并在这个对象之外保存这个对象。
实例:我们用备忘录模式完成对游戏人物的位置和等级的存储。
以下是我对此实例完成的类图:
以下是我对此实例完成的编码:
1.编写存档信息类,里面包括各个存档所包含的信息
public class Memento{ //位置 private String location; private int lever; public String getLocation() { return location; } public int getLever() { return lever; } public Memento(String location,int lever) { this.location = location; this.lever=lever; } }
2.编写存档类,其中提供方法实现对存档信息类中数据的显示(实现对存档信息的封装)
//一条存档 public class SaveFile{ //位置 private String location; //等级 private int lever; public void setLocation(String location) { this.location = location; } public void setLever(int lever) { this.lever = lever; } public String getLocation() { return location; } public int getLever() { return lever; } //将存档信息存储进一个存档 public Memento saveMemento(){ return new Memento(location,lever); } //获取存档信息的地址信息 public String getLocationFromMemento(Memento m){ return m.getLocation(); } //获取存档信息的地址信息 public int getLeverFromMemento(Memento m){ return m.getLever(); } }
3.编写存档的管理类(用于实现对存档的各种操作)
//游戏存档列表 public class MementoManager { private static final List<Memento> lists=new ArrayList<>(); //添加存档进入存档列表 public void addInfo(Memento m){ lists.add(m); } //获取存档列表中的一条存档 public Memento get(int index){ return lists.get(index); } //获取存档列表的长度 public int len(){ return lists.size(); } }
4.测试类(用于测试存档是否可以正常使用)
public class Test { public static void main(String[] args) { //新建一条存档对象 SaveFile sf=new SaveFile(); //新建一个存档列表 MementoManager mm=new MementoManager(); //将存档信息存储进如游戏 sf.setLever(1); sf.setLocation("华山"); mm.addInfo(sf.saveMemento()); sf.setLever(10); sf.setLocation("衡山"); mm.addInfo(sf.saveMemento()); sf.setLever(12); sf.setLocation("泰山"); mm.addInfo(sf.saveMemento()); sf.setLever(20); sf.setLocation("恒山"); mm.addInfo(sf.saveMemento()); System.out.println("=========模拟载入第一个存档============"); System.out.print("第一个存档:位置:"+sf.getLocationFromMemento(mm.get(0))); System.out.println("\t\t等级:"+sf.getLeverFromMemento(mm.get(0))); System.out.println("=========模拟载入第三个存档============"); System.out.print("第三个存档:位置:"+sf.getLocationFromMemento(mm.get(2))); System.out.println("\t\t等级:"+sf.getLeverFromMemento(mm.get(2))); } }
5.后台输出
=========模拟载入第一个存档============ 第一个存档:位置:华山 等级:1 =========模拟载入第三个存档============ 第三个存档:位置:泰山 等级:12
通过我为大家编写的代码来看,对于我所做的存档信息类Memento来书,我没有动用他其中的任何方法,符合:迪米特原则(在最后给大家解释这个原则),而是在其他类中编写了访问这个类中方法的方法,这就是这个模式的优点:实现了对存档信息类的封装,使用户不会知道状态保存的细节。
还有一优点就是:这样的模式使用户可以恢复状态,就像一键还原一样,通过一个时间线索将某个软件返回到当时的各种状态。
当然,我们每次存储一次记录都会产生一文件,下一次通过载入这个文件来实现状态恢复,这样也就是说:我们每一次保存都会占用一定的内存,存储文件越多,浪费的资源也会相应增长,当然,这也与每次保存的数据的属性多少有关系。
迪米特原则:
又叫最少知识原则,顾名思义,就是知道的越少越好的意思,这是为啥呢?首先,如果两个类之间没有什么直接关系的话,那就让他们发生不了直接的相互作用,这样他们对对方就不了解了,但是,如果一个类要用到另一个类的方法的话要咋办呢?我们要通过第三个类来连接他们俩,这样如果这两个类的内容修改的话,那对这个系统造成的影响是最低的,如果每两个类之间都有着密切的关系,到了最后系统维护的时候那就都乱了。
我感觉他和”松耦合”是差不多的意思,都是为了实现代码的高复用性和高扩展性。
相关文章推荐
- JAVA设计模式(十八)----备忘录模式
- JAVA -备忘录设计模式
- Java设计模式(行为型)之-备忘录模式(Memento)
- java设计模式_备忘录模式
- JAVA设计模式之 备忘录模式【Memento Pattern】
- Java设计模式学习记录-备忘录模式
- Java设计模式之备忘录模式
- java设计模式-备忘录模式
- Java设计模式_行为型_备忘录模式_大话西游之月光宝盒
- Java 单例模式的七种写法[设计模式的备忘录]
- JAVA备忘录之设计模式(01):策略模式
- JAVA设计模式之备忘录模式
- Java设计模式之备忘录模式
- Java23种设计模式——备忘录模式
- Java设计模式20-备忘录模式
- JAVA设计模式十八:--Facade(外观模式或门面模式)
- java设计模式(行为型)之备忘录模式
- java-设计模式(行为型)-【备忘录模式】
- 浅谈Java设计模式(十八)命令模式(Command)
- Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式