网站建设费算办公费吗,html5商城网站模板,汽车行业网站建设比较,上海装修公司哪家最好引言
备忘录模式#xff08;Memento Pattern#xff09;是一种行为设计模式#xff0c;它允许在不破坏封装的情况下捕获和恢复对象的内部状态。备忘录模式通过保存对象的状态来实现撤销操作。该模式通常用于需要保存历史状态的应用中#xff0c;例如编辑器、事务管理等。在…引言
备忘录模式Memento Pattern是一种行为设计模式它允许在不破坏封装的情况下捕获和恢复对象的内部状态。备忘录模式通过保存对象的状态来实现撤销操作。该模式通常用于需要保存历史状态的应用中例如编辑器、事务管理等。在金融业务中备忘录模式被广泛应用于交易回滚、历史记录等场景。本文将介绍备忘录模式在金融业务中的使用并探讨哪些框架中应用了备忘录模式及其实现方式。
设计原理
备忘录模式主要涉及以下三个角色
原发器Originator创建一个包含其当前内部状态的备忘录并使用该备忘录恢复内部状态。备忘录Memento存储原发器的内部状态并防止除了原发器之外的对象访问备忘录。负责人Caretaker负责保存备忘录但不能操作或检查备忘录的内容。
类图
下图展示了备忘录模式的类图 #mermaid-svg-82qgT6DkbzJjScpP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-82qgT6DkbzJjScpP .error-icon{fill:#552222;}#mermaid-svg-82qgT6DkbzJjScpP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-82qgT6DkbzJjScpP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-82qgT6DkbzJjScpP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-82qgT6DkbzJjScpP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-82qgT6DkbzJjScpP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-82qgT6DkbzJjScpP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-82qgT6DkbzJjScpP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-82qgT6DkbzJjScpP .marker.cross{stroke:#333333;}#mermaid-svg-82qgT6DkbzJjScpP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-82qgT6DkbzJjScpP g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-82qgT6DkbzJjScpP g.classGroup text .title{font-weight:bolder;}#mermaid-svg-82qgT6DkbzJjScpP .nodeLabel,#mermaid-svg-82qgT6DkbzJjScpP .edgeLabel{color:#131300;}#mermaid-svg-82qgT6DkbzJjScpP .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-82qgT6DkbzJjScpP .label text{fill:#131300;}#mermaid-svg-82qgT6DkbzJjScpP .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-82qgT6DkbzJjScpP .classTitle{font-weight:bolder;}#mermaid-svg-82qgT6DkbzJjScpP .node rect,#mermaid-svg-82qgT6DkbzJjScpP .node circle,#mermaid-svg-82qgT6DkbzJjScpP .node ellipse,#mermaid-svg-82qgT6DkbzJjScpP .node polygon,#mermaid-svg-82qgT6DkbzJjScpP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-82qgT6DkbzJjScpP .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-82qgT6DkbzJjScpP g.clickable{cursor:pointer;}#mermaid-svg-82qgT6DkbzJjScpP g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-82qgT6DkbzJjScpP g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-82qgT6DkbzJjScpP .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-82qgT6DkbzJjScpP .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-82qgT6DkbzJjScpP .dashed-line{stroke-dasharray:3;}#mermaid-svg-82qgT6DkbzJjScpP #compositionStart,#mermaid-svg-82qgT6DkbzJjScpP .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP #compositionEnd,#mermaid-svg-82qgT6DkbzJjScpP .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP #dependencyStart,#mermaid-svg-82qgT6DkbzJjScpP .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP #dependencyStart,#mermaid-svg-82qgT6DkbzJjScpP .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP #extensionStart,#mermaid-svg-82qgT6DkbzJjScpP .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP #extensionEnd,#mermaid-svg-82qgT6DkbzJjScpP .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP #aggregationStart,#mermaid-svg-82qgT6DkbzJjScpP .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP #aggregationEnd,#mermaid-svg-82qgT6DkbzJjScpP .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-82qgT6DkbzJjScpP .edgeTerminals{font-size:11px;}#mermaid-svg-82qgT6DkbzJjScpP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} creates stores Originator - state: String createMemento() restoreMemento(memento: Memento) Memento - state: String getState() setState(state: String) Caretaker - memento: Memento getMemento() setMemento(memento: Memento) 备忘录模式在金融业务中的应用
1. 交易回滚
在金融交易系统中当交易出现错误时需要将系统状态恢复到交易前的状态。可以使用备忘录模式实现交易回滚。
// 原发器类
public class Transaction {private String state;public void setState(String state) {this.state state;}public String getState() {return state;}public Memento createMemento() {return new Memento(state);}public void restoreMemento(Memento memento) {state memento.getState();}
}// 备忘录类
public class Memento {private String state;public Memento(String state) {this.state state;}public String getState() {return state;}
}// 负责人类
public class Caretaker {private Memento memento;public Memento getMemento() {return memento;}public void setMemento(Memento memento) {this.memento memento;}
}// 客户端代码
public class MementoPatternDemo {public static void main(String[] args) {Transaction transaction new Transaction();Caretaker caretaker new Caretaker();transaction.setState(State1);caretaker.setMemento(transaction.createMemento());transaction.setState(State2);System.out.println(Current State: transaction.getState());transaction.restoreMemento(caretaker.getMemento());System.out.println(Restored State: transaction.getState());}
}备忘录模式在框架中的应用
1. Java Serialization
Java 的序列化机制允许将对象的状态保存到一个字节流中然后可以从字节流中恢复对象。这种机制类似于备忘录模式可以用于实现对象的持久化和恢复。
// 保存对象状态
FileOutputStream fileOut new FileOutputStream(object.ser);
ObjectOutputStream out new ObjectOutputStream(fileOut);
out.writeObject(transaction);
out.close();
fileOut.close();// 恢复对象状态
FileInputStream fileIn new FileInputStream(object.ser);
ObjectInputStream in new ObjectInputStream(fileIn);
Transaction restoredTransaction (Transaction) in.readObject();
in.close();
fileIn.close();总结
备忘录模式在金融业务中具有广泛的应用可以灵活地实现交易回滚、状态恢复等功能。在框架中备忘录模式也被广泛应用于实现对象的持久化和恢复使得系统更具灵活性和可扩展性。
参考文献
Refactoring Guru - Memento PatternJava Serialization Documentation
互动与反馈
如果你觉得这篇文章对你有帮助请点赞、收藏并关注我以便获得更多优质内容如有疑问或建议欢迎在评论区留言我会及时回复。感谢阅读