队列+备忘录模式
来源:互联网 发布:格子分类信息网站源码 编辑:程序博客网 时间:2024/05/21 17:14
在使用Eclipse编写代码时,经常会用到Ctrl+Z 回到之前的某一个状态,提现在java上的就是备忘录模式,然而eclipse备忘时会有一个限制的大小,不会一直记住你很多步之前的操作是什么样的,按照我的理解是把用户的动作塞在一个限制大小的队列中,先入先出。
下面直接贴上我的代码:
- 队列工具类QueueUtils
public class QueueUtils<E> { //限制大小 private int limit; //使用链表作为队列 private LinkedList<E> list = new LinkedList<E>(); public QueueUtils(int i){ limit = i; } //先入先出 public void offer(E e){ if(list.size()>=limit){ list.poll(); } list.offer(e); } //遍历队列中的内容 public void iterator(){ for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } } //得到最后实现的动作,并移除 public String getLastAction(){ String str = (String) list.get(list.size()-1); list.remove(list.size()-1); return str; }}
- 发起者角色Originator
public class Originator { //动作 private String action; public String getAction() { return action; } public void setAction(String action) { this.action = action; } //做事情,将创建备忘录的动作放在其中 public void createMemento(Memento memento){ memento.recordMemento(action); } //读档(ctrl+z) public void restoreLastAction(Memento memento){ this.action = memento.queueMemento.getLastAction(); System.out.println("现在的动作为:---"+action); }}
- 备忘录角色Memento
public class Memento { //固定长度为5 QueueUtils<String> queueMemento =new QueueUtils<String>(5); public void recordMemento(String action){ this.queueMemento.offer(action); }}
- 客户端角色Client
public class Client { public static void main(String[] args) { Memento memento = new Memento(); Originator originator = new Originator(); originator.setAction("写了一行代码"); originator.createMemento(memento); originator.setAction("删了半行"); originator.createMemento(memento); originator.setAction("复制了七十八行代码"); originator.createMemento(memento); originator.setAction("Ctrl+A,全部删除"); originator.createMemento(memento); memento.queueMemento.iterator(); System.out.println("-------------"); //备忘最后一次操作 originator.restoreLastAction(memento); originator.restoreLastAction(memento); System.out.println("------------"); //队列里还剩下这些 memento.queueMemento.iterator(); }}
现在代码就已经可以满足我们的业务需求了,但是显然备忘录模式的 负责人角色CareTaker 还没有发挥作用。稍作修改,其他对象不需改变,客户端改动如下:
- 客户端角色Client
public class Client { public static void main(String[] args) { Memento memento = new Memento(); Originator originator = new Originator(); originator.setAction("写了一行代码"); originator.createMemento(memento); originator.setAction("删了半行"); originator.createMemento(memento); originator.setAction("复制了七十八行代码"); originator.createMemento(memento); originator.setAction("Ctrl+A,全部删除"); originator.createMemento(memento); originator.setAction("删除类"); originator.createMemento(memento); originator.setAction("删除项目"); originator.createMemento(memento); memento.queueMemento.iterator(); Caretaker caker =new Caretaker(memento); System.out.println("-------------"); //备忘最后一次操作 originator.restoreLastAction(caker.getMemento()); originator.restoreLastAction(caker.getMemento()); System.out.println("------------"); //队列里还剩下这些 memento.queueMemento.iterator(); }}
- 负责人角色Caretaker
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public Caretaker(Memento memento) { this.memento = memento; }}
这样就可以较好的实现业务了
阅读全文
0 0
- 队列+备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- gitlab发邮件收不到
- Maven搭建SpringMvc
- Java获取当前时间的上一个月和下一个月,第一天和最后一天,任意时间的第一天和最后一天,任意时间上一个月和下一个月
- css 简单的点击按钮更换展示的图片
- HTML实现简单中英文切换(仅限小页面)
- 队列+备忘录模式
- 使用ArrayList集合,对其添加100个不同的元素:
- jsp 6种动作标识
- OpenCV meanshift目标跟踪总结
- Hybrid APP 混合开发模式的选择之路(一)
- 手机移动端web总结
- gulp例子
- 口琴学习第一天
- SQL Server索引语法