jtflyweight.java

来自「Java Pattern Oriented Framework (Jt) 是为了」· Java 代码 · 共 146 行

JAVA
146
字号


package Jt;


/**
 * Jt Implementation of the Flyweight pattern.
 */

public class JtFlyweight extends JtComposite {

  public static final String JtCLASS_NAME = JtFlyweight.class.getName();
  private static final long serialVersionUID = 1L;
  private Object factory = null;
  
  // Messages
  
  public static final String JtGET_FLYWEIGHT = "JtGET_FLYWEIGHT"; 
  public static final String JtCREATE_FLYWEIGHT = "JtCREATE_FLYWEIGHT";   

  public JtFlyweight () {
  }



/**
  * Specifies the factory.
  *
  * @param factory factory
  */

  public void setFactory (Object factory) {
     this.factory = factory; 

  }

/**
  * Returns the factory.
  */

  public Object getFactory () {
     return (factory);
  }




  /**
    * Process object messages.
    * <ul>
    * <li> JtGET_FLYWEIGHT- Returns the flyweight specified by msgContent if it exists.
    * If it doesn't exist, create it (by sending JtCREATE_FLYWEIGHT to the factory) and return it. 
    * </ul>
    * @param message Jt Message
    */


  public Object processMessage (Object message) {

      String msgid = null;
      JtMessage e = (JtMessage) message;
      //Object content;
      //Object data;
      JtMessage tmp;
      JtInterface aux, aux1;



      if (e == null)
          return null;

      msgid = (String) e.getMsgId ();

      if (msgid == null)
          return null;

      //content = e.getMsgContent();
      //data = e.getMsgData ();

      // Remove this object
      if (msgid.equals (JtObject.JtREMOVE)) {
          return (null);     
      }


      if (msgid.equals (JtFlyweight.JtGET_FLYWEIGHT)) {
          tmp = new JtMessage (JtComposite.JtGET_CHILD);
          tmp.setMsgContent (e.getMsgContent ());
          aux = (JtInterface) super.processMessage (tmp);

          if (aux != null)
              return (aux); 


          if (factory == null) { 
              handleError ("processMessage: factory attribute needs to be set");
              return (null);
          }

          handleTrace ("Jt.Flyweight: processMessage creating a new flyweight");

          tmp = new JtMessage (JtFlyweight.JtCREATE_FLYWEIGHT);
          tmp.setMsgContent (e.getMsgContent ());

          aux1 = (JtInterface) sendMessage (factory, tmp);

          tmp = new JtMessage (JtComposite.JtADD_CHILD);
          tmp.setMsgContent (aux1);
          super.processMessage (tmp);
          return (aux1);


      }


      return (super.processMessage (message));


  }

 
  /**
   * Demonstrates the messages processed by JtFlyweight.
   */

  public static void main(String[] args) {

    JtObject main = new JtFactory ();

    JtFlyweight flyweightp;

    // Create an instance of JtColletion

    flyweightp = (JtFlyweight) main.createObject (JtFlyweight.JtCLASS_NAME, "flyweight");

    //main.sendMessage (composite, new JtMessage ("JtTEST"));

    main.removeObject (flyweightp);


  }

}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?