jtobservable.java

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

JAVA
136
字号


package Jt;

/**
 * Jt implementation of the Observer design pattern.
 */

public class JtObservable extends JtEnhancedObject {

  public static final String JtCLASS_NAME = JtObservable.class.getName(); 
  private static final long serialVersionUID = 1L;
  public static final String JtADD_OBSERVER = "JtADD_OBSERVER";
  public static final String JtREMOVE_OBSERVER = "JtREMOVE_OBSERVER";
  public static final String JtNOTIFY_OBSERVERS = "JtNOTIFY_OBSERVERS";
  public static final String JtNOTIFY = "JtNOTIFY";
  

  public JtObservable () {
  }


  /**
    * Process object messages.
    * <ul>
    * <li>JtADD_OBSERVER - Adds the observer contained in the message (msgContent)
    * <li>JtREMOVE_OBSERVER - Removes the observer contained in the message (msgContent)
    * <li>JtNOTIFY_OBSERVERS - Notifies its observers when the object changes
    * state. If msgContent is null, a JtNOTIFY message is sent to the observers. A reference
    * to this object is part of the JtNOTIFY message. If msgContent is not null, msgContent
    * will be sent to the observers.
    * </ul>
    */

  public Object processMessage (Object event) {

   String msgid = null;
   JtMessage e = (JtMessage) event;
   Object content;
   //Object data;
   JtMessage tmp, tmp1;

     if (e == null)
	return null;

     msgid = (String) e.getMsgId ();

     if (msgid == null)
	return null;

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


     if (msgid.equals (JtObservable.JtADD_OBSERVER)) {
       tmp = new JtMessage (JtComposite.JtADD_CHILD);
       tmp.setMsgContent (content);
       return (super.processMessage (tmp));     
     }

     if (msgid.equals (JtObservable.JtREMOVE_OBSERVER)) {
       tmp = new JtMessage (JtComposite.JtREMOVE_CHILD);
       tmp.setMsgContent (content);
       return (super.processMessage (tmp));     
     }


     if (msgid.equals (JtObservable.JtNOTIFY_OBSERVERS)) {
       tmp = new JtMessage (JtObject.JtBROADCAST);
       if (content == null) {
           tmp1 = new JtMessage (JtObservable.JtNOTIFY);
           tmp1.setMsgContent (this);
           tmp.setMsgContent (tmp1);
       } else
           tmp.setMsgContent (content);

       return (super.processMessage (tmp));     
     }


     //if (msgid.equals ("JtREMOVE")) {
     //  return (null);     
     //}

     return (super.processMessage(event));
  }

 
  /**
   * Demonstrates the messages processed by JtObserver
   */

  public static void main(String[] args) {

    JtFactory main = new JtFactory ();
    JtObservable observable;
    JtMessage msg;
    JtEcho echo1, echo2;
    

    // Create JtObservable instance

    observable = (JtObservable) main.createObject (JtObservable.JtCLASS_NAME, "observable");
    echo1 = (JtEcho) main.createObject (JtEcho.JtCLASS_NAME, "echo1");
    echo2 = (JtEcho) main.createObject (JtEcho.JtCLASS_NAME, "echo2");

    System.out.println ("JtObservable(JtADD_OBSERVER): adding an observer ...");

    msg = new JtMessage (JtObservable.JtADD_OBSERVER);
    msg.setMsgContent (echo1);

    main.sendMessage (observable, msg);


    System.out.println ("JtObservable(JtADD_OBSERVER): adding an observer ...");

    msg = new JtMessage (JtObservable.JtADD_OBSERVER);
    msg.setMsgContent (echo2);

    main.sendMessage (observable, msg);

    System.out.println ("JtObservable(JtNOTIFY_OBSERVERS): notifying observers ...");

    msg = new JtMessage (JtObservable.JtNOTIFY_OBSERVERS);
    main.sendMessage (observable, msg);
    

    main.removeObject (observable);


  }

}


⌨️ 快捷键说明

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