备忘录模式 java 作用,使用备忘录模式实现草稿箱功能

大家在网上发表文章肯定会使用到富文本编辑器,编辑器通常都会附带草稿箱、撤销等操作。

下面我们使用备忘录模式来实现这样一个功能。假设我们在 C语言中文网中发布一篇文章,文章编辑的过程需要花很长时间,中间也会不停的撤销、修改,甚至可能要花好几天才能写出一篇精品文章,所以可能会将已经编辑好的内容实时保存到草稿箱。

首先创建文本编辑器类 TextEditor(发起人角色)。

package net.biancheng.c.memento;

public class TextEditor {

private String title;

private String content;

private String imgs;

public TextEditor(String title, String content, String imgs) {

this.title = title;

this.content = content;

this.imgs = imgs;

}

public String getTitle() {

return title;

}

public String getContent() {

return content;

}

public String getImgs() {

return imgs;

}

public void setTitle(String title) {

this.title = title;

}

public void setContent(String content) {

this.content = content;

}

public void setImgs(String imgs) {

this.imgs = imgs;

}

public ArticleMemento saveToMemento() {

ArticleMemento articleMemento = new ArticleMemento(this.title, this.content, this.imgs);

return articleMemento;

}

public void undoFromMemento(ArticleMemento articleMemento) {

this.title = articleMemento.getTitle();

this.content = articleMemento.getContent();

this.imgs = articleMemento.getImgs();

}

@Override

public String toString() {

return "Editor{" +

"title='" + title + '\'' +

", content='" + content + '\'' +

", imgs='" + imgs + '\'' +

'}';

}

}

然后创建备忘录角色 ArticleMemento 类。

package net.biancheng.c.memento;

public class ArticleMemento {

private String title;

private String content;

private String imgs;

public ArticleMemento(String title, String content, String imgs) {

this.title = title;

this.content = content;

this.imgs = imgs;

}

public String getTitle() {

return title;

}

public String getContent() {

return content;

}

public String getImgs() {

return imgs;

}

@Override

public String toString() {

return "ArticleMemento{" +

"title='" + title + '\'' +

", content='" + content + '\'' +

", imgs='" + imgs + '\'' +

'}';

}

}

接着创建备忘录管理角色草稿箱 Drafts 类。

package net.biancheng.c.memento;

import java.util.Stack;

public class Drafts {

private final Stack STACK = new Stack();

public ArticleMemento getMemento() {

ArticleMemento articleMemento = STACK.pop();

return articleMemento;

}

public void addMemento(ArticleMemento articleMemento) {

STACK.push(articleMemento);

}

}

草稿箱中定义的 Stack 类是 Vector 的一个子类,它实现了一个标准的后进先出的栈。如下表所示,主要定义了以下方法。

方法定义

方法描述

boolean empty()

判断堆栈是否为空

Object peek()

查看堆栈顶部的对象,但不从堆栈中移除它

Object pop()

移除堆栈顶部的对象,并作为此函数的值返回该对象

Object push(Object element)

把对象压入堆栈顶部

int search(Object element)

返回对象在堆栈中的位置,以1为基数

客户端测试代码如下。

package net.biancheng.c.memento;

public class Test {

public static void main(String[] args) {

Drafts Drafts = new Drafts();

TextEditor TextEditor = new TextEditor("Java设计模式",

"本文节选自《Java设计模式》教程,C语言中文网原创。",

"1.png");

ArticleMemento articleMemento = TextEditor.saveToMemento();

Drafts.addMemento(articleMemento);

System.out.println("标题:" + TextEditor.getTitle() + "\n" +

"内容:" + TextEditor.getContent() + "\n" +

"插图:" + TextEditor.getImgs() + "\n暂存成功");

System.out.println("完整信息" + TextEditor);

System.out.println("==========首次修改文章===========");

TextEditor.setTitle("Java设计模式:23种设计模式全面解析");

TextEditor.setContent("本文节选自《Java设计模式:23种设计模式全面解析》教程,C语言中文网原创教程。");

System.out.println("==========首次修改文章完成===========");

System.out.println("完整信息" + TextEditor);

articleMemento = TextEditor.saveToMemento();

Drafts.addMemento(articleMemento);

System.out.println("==========保存到草稿箱===========");

System.out.println("==========第2次修改文章===========");

TextEditor.setTitle("Java设计模式:23种设计模式全面解析(超级详细)");

TextEditor.setContent("本文节选自《Java设计模式:23种设计模式全面解析》教程,C语言中文网原创。");

System.out.println("完整信息" + TextEditor);

System.out.println("==========第2次修改文章完成===========");

System.out.println("==========第1次撤销===========");

articleMemento = Drafts.getMemento();

TextEditor.undoFromMemento(articleMemento);

System.out.println("完整的信息" + TextEditor);

System.out.println("==========第1次撤销完成===========");

System.out.println("==========第2次撤销===========");

articleMemento = Drafts.getMemento();

TextEditor.undoFromMemento(articleMemento);

System.out.println("完整的信息" + TextEditor);

System.out.println("==========第2次撤销完成===========");

}

}

运行结果如下所示。

标题:Java设计模式

内容:本文节选自《Java设计模式》教程,C语言中文网原创。

插图:1.png

暂存成功

完整信息Editor{title='Java设计模式', content='本文节选自《Java设计模式》教程,C语言中文网原创。', imgs='1.png'}

==========首次修改文章===========

==========首次修改文章完成===========

完整信息Editor{title='Java设计模式:23种设计模式全面解析', content='本文节选自《Java设计模式:23种设计模式全面解析》教程,C语言中文网原创教程。', imgs='1.png'}

==========保存到草稿箱===========

==========第2次修改文章===========

完整信息Editor{title='Java设计模式:23种设计模式全面解析(超级详细)', content='本文节选自《Java设计模式:23种设计模式全面解析》教程,C语言中文网原创。', imgs='1.png'}

==========第2次修改文章完成===========

==========第1次撤销===========

完整的信息Editor{title='Java设计模式:23种设计模式全面解析', content='本文节选自《Java设计模式:23种设计模式全面解析》教程,C语言中文网原创教程。', imgs='1.png'}

==========第1次撤销完成===========

==========第2次撤销===========

完整的信息Editor{title='Java设计模式', content='本文节选自《Java设计模式》教程,C语言中文网原创。', imgs='1.png'}

==========第2次撤销完成===========

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值