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 );
}
}
戻る