⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jtmemento.java

📁 Java Pattern Oriented Framework (Jt) 是为了实现Java快速开发的面向模式的框架。
💻 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 + -