Observer/Observableモデル

戻る

$ java -cp . MyTest
メッセージが生成されました @2005-11-19 17:40:25
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:25 count=1
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:25 count=1
メッセージが生成されました @2005-11-19 17:40:26
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:26 count=2
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:26 count=2
メッセージが生成されました @2005-11-19 17:40:27
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:27 count=3
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:27 count=3
メッセージが生成されました @2005-11-19 17:40:28
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:28 count=4
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:28 count=4
メッセージが生成されました @2005-11-19 17:40:29
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:29 count=5
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:29 count=5
メッセージが生成されました @2005-11-19 17:40:30
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:30 count=6
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:30 count=6
メッセージが生成されました @2005-11-19 17:40:31
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:31 count=7
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:31 count=7
メッセージが生成されました @2005-11-19 17:40:32
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:32 count=8
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:32 count=8
メッセージが生成されました @2005-11-19 17:40:33
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:33 count=9
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:33 count=9
メッセージが生成されました @2005-11-19 17:40:34
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:34 count=10
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:34 count=10
メッセージが生成されました @2005-11-19 17:40:35
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:35 count=11
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:35 count=11
メッセージが生成されました @2005-11-19 17:40:36
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:36 count=12
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:36 count=12
メッセージが生成されました @2005-11-19 17:40:37
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:37 count=13
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:37 count=13
メッセージが生成されました @2005-11-19 17:40:38
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:38 count=14
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:38 count=14
メッセージが生成されました @2005-11-19 17:40:39
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:39 count=15
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:39 count=15
メッセージが生成されました @2005-11-19 17:40:40
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:40 count=16
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:40 count=16
メッセージが生成されました @2005-11-19 17:40:41
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:41 count=17
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:41 count=17
メッセージが生成されました @2005-11-19 17:40:42
        MarsObserver:   メッセージが生成されました @2005-11-19 17:40:42 count=18
        VenusObserver:  メッセージが生成されました @2005-11-19 17:40:42 count=18


::::::::::::::
DefaultObserver.java
::::::::::::::
import java.util.*;
/**
* $Id: Observer.html,v 1.1 2009/06/22 16:11:51 kishi Exp kishi $
*/

public class DefaultObserver {

    protected void dump( MyObservable observable, Object arg ) {

        System.out.println( "\t" + this.getClass().getName() + ":\t" + arg + "\tcount=" + observable.getCount() );

    }

}
::::::::::::::
MarsObserver.java
::::::::::::::
import java.util.*;

/**
* $Id: Observer.html,v 1.1 2009/06/22 16:11:51 kishi Exp kishi $ 
*/

public class MarsObserver extends DefaultObserver implements Observer {

    public MarsObserver() {}
    public void update( Observable obj, Object arg ) {

        dump( ( MyObservable ) obj, arg );

    }
}

::::::::::::::
MyObservable.java
::::::::::::::
import java.util.*;

/**
* $Id: Observer.html,v 1.1 2009/06/22 16:11:51 kishi Exp kishi $
*/

public class MyObservable extends Observable implements Runnable {

    private int count = 0;

    public MyObservable() {}
    public void run() {
        while ( true ) {

            String msg = "メッセージが生成されました @" + TSUtil.getCurrentDateTime();

            System.out.println( msg );

            count++;

            setChanged();
            notifyObservers( msg );

            try {
                Thread.sleep( 1000 );
            } catch ( Exception e ) {
                e.printStackTrace();
            }
        }

    }

    public int getCount() {
        return count;
    }
}

::::::::::::::
MyTest.java
::::::::::::::
import java.util.*;

/**
* $Id: Observer.html,v 1.1 2009/06/22 16:11:51 kishi Exp kishi $
*/

public class MyTest {

    public MyTest() {
        //----------------------------------------------
        // create the Observable
        //----------------------------------------------
        MyObservable mo = new MyObservable();

        //----------------------------------------------
        // create the Observers
        //----------------------------------------------
        VenusObserver venus = new VenusObserver();
        MarsObserver mars = new MarsObserver();

        //----------------------------------------------
        // add the Observers to the Observable
        //----------------------------------------------
        mo.addObserver( venus );
        mo.addObserver( mars );

        //----------------------------------------------
        // start the MyObservable
        //----------------------------------------------
        ( new Thread( mo ) ).start();

    }

    public static void main( String[] args ) {
        MyTest myTest = new MyTest();
    }
}


::::::::::::::
TSUtil.java
::::::::::::::
import java.util.*;

/**
* $Id: Observer.html,v 1.1 2009/06/22 16:11:51 kishi Exp kishi $
*/
public class TSUtil {

    public static String getCurrentDateTime() {
        Calendar calendar = Calendar.getInstance();

        StringBuffer sb = new StringBuffer();
        sb.append( calendar.get( Calendar.YEAR ) );

        int mm = calendar.get( Calendar.MONTH ) + 1;
        sb.append( "-" + zeroPad( mm ) );

        int dd = calendar.get( Calendar.DATE );
        sb.append( "-" + zeroPad( dd ) );

        int hh = calendar.get( Calendar.HOUR_OF_DAY );
        sb.append( " " + zeroPad( hh ) );

        int mi = calendar.get( Calendar.MINUTE );
        sb.append( ":" + zeroPad( mi ) );

        int ss = calendar.get( Calendar.SECOND );
        sb.append( ":" + zeroPad( ss ) );

        return sb.toString();
    }

    private static String zeroPad( int number ) {
        return ( number < 10 ) ? "0" + number : String.valueOf( number );
    }

}

::::::::::::::
VenusObserver.java
::::::::::::::
import java.util.*;

/**
* $Id: Observer.html,v 1.1 2009/06/22 16:11:51 kishi Exp kishi $ 
*/

public class VenusObserver extends DefaultObserver implements Observer {

    public VenusObserver() {}
    public void update( Observable obj, Object arg ) {

        dump( ( MyObservable ) obj, arg );

    }
}

戻る inserted by FC2 system