如何进入VibeThinker-1.5B容器执行初始化脚本?

核心内容摘要

Maple Flow 2025.2 新版发布:更强性能、AI助力、轻松迁移,开启高效计算新体验!
BMI325,低功耗特性、快速启动和硬件同步的传感器

书籍-乔治·马戛尔尼+约翰·巴罗《马戛尔尼使团使华观感》

文章目录

个人感悟

概念

适配场景

1 适合的场景

2 常见场景举例

实现方法

1 实现思路

2 UML类图

3 代码示例

优缺点

1 优点

2 缺点

源码分析

1 Java Swing中的UndoManager

个人感悟备忘录模式的场景也比较专。

适合进行备份、恢复模式优点很明显状态保存于业务逻辑分离实现解耦一个注意的点是窄接口设计Memento(备忘录)内部保存了Originator原发器的状态但这个状态不应该被除了Originator之外的其他对象特别是Caretaker直接访问或修改以保护状态的封装性。

具体可以看看示例代码

概念英文定义(《设计模式可复用面向对象软件的基础》)Without violating encapsulation, capture and externalize an object,t internal state so that the object can be restored this state later.中文翻译在不破坏封装性的前提下捕获一个对象的内部状态并在该对象之外保存这个状态以便以后可以将对象恢复到原先保存的状态。

理解备忘录模式提供了一种状态恢复机制允许对象回到某个历史状态它通过独立的对象备忘录来存储状态而不是由原对象自己保存实现了状态保存与业务逻辑的分离原对象专注于业务管理者专注于状态管理

适配场景

1 适合的场景需要撤销/重做功能如文本编辑器、绘图软件的操作历史需要保存快照/检查点如游戏存档、系统配置备份状态转换复杂如工作流引擎的状态管理需要事务回滚如数据库操作的事务管理原型状态保存如复杂对象构造过程中的中间状态保存需要版本控制如文档编辑的历史版本管理

2 常见场景举例IDE开发环境Eclipse/IntelliJ IDEA的代码编辑撤销功能绘图软件Photoshop的历史记录面板游戏开发游戏进度存档/读档系统表单应用多步表单的回退功能配置管理系统配置的备份与恢复数据库系统事务的rollback机制

实现方法

1 实现思路识别状态数据确定需要保存的内部状态字段创建Memento类设计存储状态的数据结构在Originator中添加状态管理创建保存状态的方法saveToMemento()创建恢复状态的方法restoreFromMemento()设计Caretaker类决定存储策略栈、列表、树等实现状态管理逻辑撤销、重做、清空等控制访问权限对Originator开放宽接口可读写状态对Caretaker开放窄接口只读元数据

2 UML类图角色说明Originator原发器需要保存状态的对象负责创建和恢复备忘录Memento备忘录存储Originator内部状态通常设计为不可变对象Caretaker管理者负责保存和管理备忘录但不能操作备忘录内容

3 代码示例背景以文件编辑器为例简化业务只有保存和撤销功能设计原发器publicclassTextEditor{privateStringcontent;publicStringgetContent(){returncontent;}publicvoidsetContent(Stringcontent){this.contentcontent;}publicTextEditor(Stringcontent){this.contentcontent;}/** * description 创建备忘 * author bigHao * date 2026/1/27 * return designpattern.memento.pac.TextMemento 备忘录 **/publicTextMementocreateMemento(){returnnewTextMemento(content);}/** * description 恢复备忘 * author bigHao * date 2026/1/27 * param memento 备忘录 **/publicvoidrestoreMemento(TextMementomemento){this.contentmemento.getContent();}}备忘录注意权限控制。

备忘录只有原发器可以创建和访问内容。

实际操作中将二者放到一个包下相关方法使用包权限publicclassTextMemento{privateStringcontent;// 包访问权限仅对Originator开放状态访问TextMemento(Stringcontent){this.contentcontent;}StringgetContent(){returncontent;}}管理者publicclassCaretaker{privatestaticfinalintMAX_SIZE100;// 业务场景刚好使用stack 先进后出privateStackTextMementohistorynewStack();publicvoidpush(TextMementomemento){// 限制下长度limitHistory();this.history.push(memento);}publicTextMementopop(){returnthis.history.pop();}privatevoidlimitHistory(){if(history.size()MAX_SIZE){history.removeFirst();}}}测试publicclassClient{staticvoidmain(){// 创建Stringcontent备忘录模式笔记;TextEditortextEditornewTextEditor(content);printInfo(textEditor);CaretakercaretakernewCaretaker();// 安全考虑TextMemento是包访问权限和TextEditor同包其它地方无法直接创建// new TextMemento(); 会报错// 保存1caretaker.push(textEditor.createMemento());content包括三个角色分别是原发器;textEditor.setContent(content);caretaker.push(textEditor.createMemento());printInfo(textEditor);// 保存2content、备忘录;textEditor.setContent(content);caretaker.push(textEditor.createMemento());printInfo(textEditor);// 保存3content和管理者;textEditor.setContent(content);caretaker.push(textEditor.createMemento());printInfo(textEditor);// 编辑content 功能分别是;textEditor.setContent(content);printInfo(textEditor);// 撤销1System.out.println(撤销);textEditor.restoreMemento(caretaker.pop());printInfo(textEditor);// 撤销2System.out.println(撤销);textEditor.restoreMemento(caretaker.pop());printInfo(textEditor);}privatestaticvoidprintInfo(TextEditortextEditor){System.out.println(当前内容: textEditor.getContent());}}输出当前内容: 备忘录模式笔记 当前内容: 备忘录模式笔记包括三个角色分别是原发器 当前内容: 备忘录模式笔记包括三个角色分别是原发器、备忘录 当前内容: 备忘录模式笔记包括三个角色分别是原发器、备忘录和管理者 当前内容: 备忘录模式笔记包括三个角色分别是原发器、备忘录和管理者 功能分别是 撤销 当前内容: 备忘录模式笔记包括三个角色分别是原发器、备忘录和管理者 撤销 当前内容: 备忘录模式笔记包括三个角色分别是原发器、备忘录

优缺点

1 优点高内聚低耦合职责分离状态保存与业务逻辑解耦Originator只关注核心功能封装性通过窄接口模式保护状态不被Caretaker误操作复用性状态管理可复用Caretaker可被多个Originator复用存储策略灵活支持栈、列表、数据库等多种存储方式可读性意图明确代码明确表达了保存状态和恢复状态的意图结构清晰三个角色分工明确易于理解维护性易于扩展可轻松添加新的存储策略或状态类型修改隔离状态存储逻辑变化不影响Originator稳定性状态一致确保状态恢复的正确性异常安全状态操作失败时可恢复到之前状态

2 缺点资源消耗内存占用大量状态保存可能导致内存消耗过大性能开销频繁的状态保存/恢复可能影响性能设计复杂度额外类增加了Memento和Caretaker类窄接口实现复杂需要小心设计访问权限状态同步深拷贝问题复杂对象的深拷贝可能实现复杂版本兼容状态数据结构变化时旧备忘录可能无法恢复

源码分析

1 Java Swing中的UndoManager代码位置javax.swing.undo.UndoManager角色分析// Originator各种Document类如PlainDocumentpublicclassPlainDocumentextendsAbstractDocument{// 创建UndoableEdit备忘录protectedUndoableEditcreateUndoableEdit(ElementChangeec){returnnewDocumentUndoableEdit(ec);}}// MementoUndoableEdit接口及其实现publicinterfaceUndoableEdit{voidundo()throwsCannotUndoException;voidredo()throwsCannotRedoException;booleancanUndo();booleancanRedo();}// CaretakerUndoManager类publicclassUndoManagerextendsCompoundEditimplementsUndoableEditListener{privateVectorUndoableEditedits;// 存储备忘录privateintindexOfNextAdd;// 下一个添加位置publicvoidundo()throwsCannotUndoException{// 执行撤销操作UndoableEditeditedits.elementAt(--indexOfNextAdd);edit.undo();}publicvoidredo()throwsCannotRedoException{// 执行重做操作UndoableEditeditedits.elementAt(indexOfNextAdd);edit.redo();indexOfNextAdd;}}参考:韩顺平 Java设计模式归思君 设计模式学习笔记十八备忘录模式及其实现kosamino 设计模式之备忘录模式Memento详解及代码示例

com.胡桃大战史莱姆-com.胡桃大战史莱姆应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123