📄 jtmemento.java
字号:
package Jt;
import Jt.examples.HelloWorld;
import Jt.xml.JtXMLHelper;
/**
* Jt implementation of the Memento pattern. This class captures
* the internal state of an object (originator) so that
* it can be restored to this state later.
*/
public class JtMemento extends JtObject {
public static final String JtCLASS_NAME = JtMemento.class.getName();
private static final long serialVersionUID = 1L;
private Object state = null;
public static final String JtSAVE = "JtSAVE";
public static final String JtRESTORE = "JtRESTORE";
/**
* Specifies (saves) the originator's internal state.
* @param state state
*/
public void setState (Object state) {
this.state = state;
}
/**
* Returns the originator's internal state.
*/
public Object getState () {
return (state);
}
public JtMemento () {
}
private void saveObject (Object obj) {
JtMessage msg = new JtMessage (JtObject.JtXML_ENCODE);
JtXMLHelper helper = new JtXMLHelper ();
if (obj == null)
return;
msg.setMsgContent (obj);
state = helper.processMessage(msg);
}
private Object restoreObject (Object obj) {
JtMessage msg = new JtMessage (JtObject.JtXML_DECODE);
JtXMLHelper helper = new JtXMLHelper ();
Object tmp;
JtFactory factory = new JtFactory ();
if (state == null) {
handleError ("JtMemento.restoreObject: invalid state (null).");
return (null);
}
msg.setMsgContent (state);
tmp = helper.processMessage(msg);
if (tmp == null) {
handleTrace ("restoreObject failed: unable to convert object from XML:\n" + state);
return null;
}
msg = new JtMessage (JtObject.JtCOPY);
msg.setMsgContent (tmp);
msg.setMsgData (obj);
sendMessage (factory, msg);
return (null);
}
/**
* Process object messages.
* <ul>
* <li>JtSAVE - Saves the state of an object specified by msgContent using the XML format.
* <li>JtRESTORE - Restores the object specified by msgContent to its original state.
* <li>JtREMOVE - Performs any housekeeping that may be needed before this
* object is removed.
* </ul>
*/
public Object processMessage (Object event) {
String msgid = null;
JtMessage e = (JtMessage) event;
if (e == null)
return null;
msgid = (String) e.getMsgId ();
if (msgid == null)
return null;
if (msgid.equals (JtObject.JtREMOVE)) {
return (null);
}
if (msgid.equals (JtMemento.JtSAVE)) {
saveObject (e.getMsgContent());
return (null);
}
if (msgid.equals (JtMemento.JtRESTORE)) {
restoreObject (e.getMsgContent ());
return (null);
}
return (super.processMessage(event));
}
/**
* Demonstrates the messages processed by JtMemento.
*/
public static void main(String[] args) {
JtFactory factory = new JtFactory ();
JtMemento memento;
JtMessage msg;
HelloWorld hello = new HelloWorld ();
hello.setGreetingMessage("Hello World");
// Create an instance of JtMemento
memento = (JtMemento) factory.createObject (JtMemento.JtCLASS_NAME, "memento");
// Save the state of hello using Memento
msg = new JtMessage (JtMemento.JtSAVE);
msg.setMsgContent(hello);
factory.sendMessage (memento, msg);
System.out.println ("Saved object:");
factory.sendMessage (hello, new JtMessage (JtObject.JtPRINT));
hello.setGreetingMessage("new message");
System.out.println ("Object after changed:");
factory.sendMessage (hello, new JtMessage (JtObject.JtPRINT));
// Restore the object
msg = new JtMessage (JtMemento.JtRESTORE);
msg.setMsgContent(hello);
factory.sendMessage (memento, msg);
System.out.println ("Restored Object:");
factory.sendMessage (hello, new JtMessage (JtObject.JtPRINT));
factory.removeObject (memento);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -