23种设计模式-java-备忘录
2021/7/13 1:07:11
本文主要是介绍23种设计模式-java-备忘录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
模式概述:
允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。
使用场景:
1.当你需要创建对象状态快照来恢复其之前的状态时, 可以使用备忘录模式。
2.当直接访问对象的成员变量、 获取器或设置器将导致封装被突破时, 可以使用该模式。
代码样例:
/** * 编辑器 */ public class Editor { StringBuilder text = new StringBuilder(); public String getText(){ return text.toString(); } public void add(String string){ text.append(string); } /** * 创建快照 */ public Snapshot createSnapshot(){ return new Snapshot(text.toString()); } /** * 恢复快照 */ public void restoreSnapshot(Snapshot snapshot){ this.text.replace(0,text.length(),snapshot.getText()); } }
/** * 快照对象 * 应与原发器的属性保持一致(需要备份的属性),构造方法对所有属性赋值,并提供各个属性的访问方法 */ public class Snapshot { String text; public Snapshot(String text) { this.text = text; } public String getText(){ return text; } }
/** * 历史快照容器 */ public class SnapthodHolder { Stack<Snapshot> his = new Stack<>(); public void push(Snapshot snapshot){ his.push(snapshot); } public Snapshot pop(){ if(!his.isEmpty()){ return his.pop(); }else{ return null; } } }
/** * 测试备忘录 */ public class TestMomento { public static void main(String[] args) { Editor editor = new Editor(); SnapthodHolder snapthodHolder = new SnapthodHolder(); System.out.println("Editor初始值:"+editor.getText()); snapthodHolder.push(editor.createSnapshot()); editor.add("123"); System.out.println("Editor添加一次后:"+editor.getText()); snapthodHolder.push(editor.createSnapshot()); editor.add("abc"); System.out.println("Editor添加二次后:"+editor.getText()); Snapshot snapshot1= snapthodHolder.pop(); if(snapshot1 !=null) editor.restoreSnapshot(snapshot1); System.out.println("Editor进行一次撤销后:"+editor.getText()); Snapshot snapshot2= snapthodHolder.pop(); if(snapshot2 !=null) editor.restoreSnapshot(snapshot2); System.out.println("Editor进行二次撤销后:"+editor.getText()); } }
测试结果:
这篇关于23种设计模式-java-备忘录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14后台交互资料入门指南
- 2024-11-14如何轻松创建项目环境:新手入门教程
- 2024-11-14如何抽离公共代码:初级开发者指南
- 2024-11-14Python编程入门指南
- 2024-11-14Python编程入门:如何获取参数
- 2024-11-14JWT 用户校验:简单教程与实践
- 2024-11-14Pre-commit 自动化测试入门指南
- 2024-11-14Python编程基础
- 2024-11-14Server Action入门教程:轻松掌握服务器操作
- 2024-11-14Server Component入门教程:轻松搭建服务器组件