备忘录模式(行为类)
来源:互联网 发布:剑网三咩太捏脸数据 编辑:程序博客网 时间:2024/06/08 09:25
UML
- Originator角色: 1.创建一个含有当前的内部状态的备忘录对象。2.使用备忘录对象存储其内部状态
- Mementor角色: 1.将发起人对象的内部状态存储起来。备忘录可以根据Originator对象的判断来决定存储多少Originator对象的内部状态
- 负责人Caretaker角色: 1.负责保存备忘录对象。2.不检查备忘录对象的内容
介绍
意图: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在改对象之外保存这个状态。
优点: 1.提供了一个可以恢复状态的机制,可以使用户能够方便地回到某个历史的状态,2.实现了信息的封装,使得用户不需要状态保存的细节
缺点: 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存
例子
UML
代码
Boy(Originator)
public class Boy { private String state = "" ; public void changeState(String s){ this.state = s ; } public String getState(){ return this.state ; } public Mementor createMemento(){ return new Mementor(this.state) ; } public void restoreMemento(Mementor memento){ this.setState(memento.getState()); } public void setState(String state){ this.state = state ; }}
Mementor(mementor)
public class Mementor { private String state ; public Mementor(String state) { this.state = state ; } public String getState() { return this.state; }}
Caretaker(caretaker)
import java.util.ArrayList;import java.util.List;public class Caretaker { private List<Mementor> memntors = new ArrayList<Mementor>() ; public Mementor getMementor(int index){ if(index < memntors.size()){ return memntors.get(index) ; } return null ; } public void setMementor(Mementor memntor){ memntors.add(memntor) ; }}
Client(client)
public class Client { public static void main(String[] args) { Boy boy = new Boy() ; Caretaker caretaker = new Caretaker() ; boy.changeState("今天心情很好"); System.out.println(boy.getState()); caretaker.setMementor(boy.createMemento()); boy.setState("今天心情很差"); System.out.println(boy.getState()); boy.restoreMemento(caretaker.getMementor(0)); System.out.println(boy.getState()); }}
结果
今天心情很好今天心情很差今天心情很好
参考
设计模式之禅
java与模式
0 0
- 备忘录模式(行为类)
- 行为类模式-备忘录模式(11)
- 行为模式--备忘录模式
- 行为模式-备忘录模式
- 备忘录模式 - 行为模式
- 备忘录模式(行为型)
- 设计模式-行为-备忘录
- 备忘录模式-对象行为模式
- 行为模式之备忘录模式
- 行为型模式--备忘录模式
- 行为型模式-备忘录模式
- java 行为模式 备忘录模式
- 行为模式:Memento(备忘录)
- 行为型模式-备忘录memento
- 设计模式---行为类型---备忘录
- 备忘录模式(行为型)
- 行为型之备忘录模式
- 设计模式 - 行为型模式 - 备忘录模式
- VR开发-VRTK基本设置
- react-router 2.5 context undefiend replaceState deprecated
- 数据库的索引和数据库查询
- 增量更新(制作差分包笔记)
- Unity3D在mac上使用VSCODE开发
- 备忘录模式(行为类)
- 今天12.7日,卖了氯霉素眼药水
- Codeforces Round #383 (Div. 2) B(打表)
- Serv-U FTP Server 中文版 11.0.0.4安装及使用说明
- I2C笔记
- html标签被当成文本
- 存储过程增删改查
- Android Studio连接Genymotion模拟器
- 有其他mysql存在的情况下,MAC-XAMPP的mysql无法启动的解决方案