当前位置: 首页 > news >正文

长春网站设计四川网站建设

长春网站设计,四川网站建设,公司销售网站怎么做,网站全屏轮播代码 js文章目录 前言思路代码实现uml类图总结 前言 最近学习设计模式行为型的模式#xff0c;学到了备忘录模式提到这个模式可以记录一个对象的状态属性值#xff0c;用于下次复用#xff0c;于是便想到了我们在Windows系统上使用的撤销操作#xff0c;于是便想着使用这个模式进… 文章目录 前言思路代码实现uml类图总结 前言 最近学习设计模式行为型的模式学到了备忘录模式提到这个模式可以记录一个对象的状态属性值用于下次复用于是便想到了我们在Windows系统上使用的撤销操作于是便想着使用这个模式进行一次模仿复现 思路 以下是按照备忘录和命令模式结合的思路描述 首先我们有一个文档类 Document其中包含一个文本属性。文档类提供了设置和获取文本的方法。 我们引入备忘录类 Memento用于保存文档对象的状态。 文档类还实现了创建备忘录和恢复备忘录的方法。创建备忘录时文档对象会将当前的文本状态传递给备忘录对象进行保存。恢复备忘录时文档对象会从备忘录对象中获取之前保存的文本状态并恢复。 为了实现可逆操作和撤销功能我们引入了命令接口 Command该接口定义了执行方法 execute() 和撤销方法 undo()。 具体命令类 InsertTextCommand 是一个插入文本操作的具体实现。在执行命令时该命令对象会调用文档对象的插入文本方法并将执行前的文本状态保存到备忘录对象中。在撤销命令时该命令对象会使用备忘录对象恢复文档的文本状态。 历史记录类 History 充当调用者的角色用于记录执行的命令。它内部使用一个列表来保存命令对象。每次执行命令时该命令对象被添加到列表中保存每次撤销命令时列表的最后一个命令对象被取出并执行其撤销操作。 在主程序中我们实例化了文档对象、备忘录对象和历史记录对象。 执行插入文本命令1创建插入文本命令对象并将其添加到历史记录对象的列表中。该命令对象会执行插入文本操作并将执行前的文本状态保存到备忘录对象中。 执行插入文本命令2同样创建插入文本命令对象并将其添加到历史记录对象的列表中。该命令对象也会执行插入文本操作并将执行前的文本状态保存到备忘录对象中。 执行撤销命令历史记录对象的列表中取出最后一个命令对象即插入文本命令2并执行其撤销操作。命令对象会从备忘录对象中获取之前保存的文本状态恢复文档的内容。 输出文档的内容即输出 “Hello”。 再次执行撤销命令历史记录对象的列表中取出插入文本命令1并执行其撤销操作。文档的内容变为空字符串。 输出文档的内容即输出空字符串。 尝试再次执行撤销命令由于历史记录中已没有可撤销的命令不会执行任何操作。 最后输出文档的内容依然输出空字符串。 代码实现 实现类似于 Word 文档中的撤销和恢复操作可以采用备忘录模式配合命令模式的方式。 备忘录类Memento备忘录类负责存储文档的状态。它可以保存文档的内容、样式、光标位置等信息。 class Memento {private String content;private String style;private int cursorPosition;// 构造函数和访问方法 }命令接口Command命令接口定义执行和撤销操作的方法。 interface Command {void execute();void undo(); }具体命令类具体的操作实现命令接口执行和撤销文档的具体操作。例如插入文本、修改样式、移动光标等。 class InsertTextCommand implements Command {private Document document;private Memento prevState;private String newText;public InsertTextCommand(Document document, String newText) {this.document document;this.newText newText;}public void execute() {prevState document.createMemento();document.setText(newText);}public void undo() {document.restore(prevState);} }文档类Originator文档类维护文档的状态并提供创建备忘录、恢复状态和执行操作的方法。 class Document {private String text;public void setText(String text) {this.text text;}public String getText() {return text;}public Memento createMemento() {return new Memento(text);}public void restore(Memento memento) {text memento.getState();} }历史记录类Caretaker历史记录类负责存储备忘录对象并管理执行和撤销操作的命令。 class History {private StackCommand commandStack;public History() {commandStack new Stack();}public void executeCommand(Command command) {command.execute();commandStack.push(command);}public void undo() {if (!commandStack.isEmpty()) {Command command commandStack.pop();command.undo();}} }使用以上设计的示例代码如下 public static void main(String[] args) {// 创建文档对象和历史记录对象Document document new Document();History history new History();// 执行命令插入文本Command insertCommand1 new InsertTextCommand(document, Hello);history.executeCommand(insertCommand1);// 执行命令插入文本Command insertCommand2 new InsertTextCommand(document, World!);history.executeCommand(insertCommand2);// 输出文档内容System.out.println(document.getText()); // 输出World!// 执行命令撤销上一个命令history.undo();// 输出文档内容System.out.println(document.getText()); // 输出hello// 执行命令撤销上一个命令没有可撤销的命令history.undo(); // 不执行任何操作// 输出文档内容System.out.println(document.getText()); // 输出}通过使用备忘录模式和命令模式我们可以记录文档状态的变化并在需要时进行撤销和恢复操作。每次执行操作时都会创建对应的命令对象并将其添加到历史记录中以支持撤销和重做操作。 uml类图 总结 这个功能的实现使用了备忘录模式和命令模式两种设计模式。 备忘录模式用于保存文档对象的状态并提供了恢复状态的功能。它将文档对象的状态封装在备忘录对象中以便在需要时可以对其进行保存并恢复。这样可以在不破坏文档对象封装性的情况下实现文档对象的状态管理和回滚功能。 命令模式用于执行和撤销操作。通过将每个操作封装在一个命令对象中并提供统一的执行和撤销方法可以实现对操作的统一管理和控制。这样可以方便地扩展和组合不同的操作同时也解耦了调用者和接收者。 使用设计模式的好处包括 提高代码的可维护性和可扩展性设计模式使代码结构更清晰、更易于理解和维护。模式中定义了明确的角色和关系使代码具有良好的组织结构和可扩展性。 复用性增加设计模式通过提供通用的解决方案使得代码可以在不同场景下被重复使用。这避免了重复编写相似的代码提高了开发效率。 降低耦合度设计模式通过明确角色和关系将系统中各组件之间的依赖关系降到最低。这样当需求变化或者需要修改某一个组件时对其他组件的影响最小易于维护和扩展。 提高代码的可测试性设计模式将逻辑分离开来使得每个模块可以独立地进行测试便于编写单元测试和集成测试。
http://www.hkea.cn/news/14554589/

相关文章:

  • 论文中网站数据如何做脚注教育教学网站建设
  • 微官网站怎么做猎头公司排名前十
  • 校园二级网站建设评比自评网页搭建流程
  • 韩国网站空间推荐wordpress版权所有在哪里
  • 五莲县网站建设化妆品网页设计论文
  • 门户网站建设招标公告怎么改变wordpress首页
  • 百度上免费创建网站人才共享网站的建设方案怎么写
  • 南昌整站优化移动端商城网站开发
  • 建设银行 产品管理中心网站做狗狗网站的背景图
  • 京东物流网站网络推广服务内容
  • 网站代运营性价比高河南省工程建设信息网官网入口
  • 功能型网站建设时间深圳高端网站设计
  • php企业门户网站合肥手机网站制作
  • 嘉兴网站建设服务jsp源码做网站
  • 上海网站制作公司怎么找两学一做网站注册
  • 做服装必须看的十大网站怎么查网站icp
  • 校园招生网站建设的简报淄博刚刚发布紧急通知
  • 广西茶叶学会 网站建设做网站就上房山华网天下
  • 北京网站建设建站公司北京网站建设公司排行
  • 美容会所网站模板下载品牌设计案例网站
  • 桂林旅游网站网络优化网站 site
  • 政务网站开发理念cnzz wordpress
  • 珠宝网站建设公司什么是网页设计师
  • 一个服务器下怎么做两个网站用jsp做视频网站
  • 闵行建设机械网站wordpress模板底部
  • 必应网站建设网站需要证件
  • 中国建设银行官方网站纪念币北京本地服务信息网
  • 网站扫二维码怎么做小程序开发定制开发
  • 城乡建设网站首页默认缩略图 wordpress
  • 公司网站建设论文网站建设包括哪些内容