프로그램/pattern
Observe 클래스 사용하기
이승구
2009. 8. 26. 13:43
반응형
Observe 패턴을 구현한 클래스들을 이용하여
Observe 패턴을 대략적으로 생각해보게 되었음
자료 출처는 위키디피아의 Observable 로 검색할때 나오는 코드이며
이를 직접 토딩하여 확인해보았음
http://ko.wikipedia.org/wiki/%EC%98%B5%EC%A0%80%EB%B2%84_%ED%8C%A8%ED%84%B4
코드는 다음과 같음
package pattern.observerpattern;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Observable;
/**
* thread 로 도는 객체
* 사용자의 입력을 받으면 변경되었다는 것을 통보함(Observable)
* 통보를 받을 객체는 EventSource 를 생성할 떄 추가하게 됨
*
* @author lsk
* @since 2009.08.26
*/
public class EventSource extends Observable implements Runnable{
public void run() {
InputStreamReader isr;
BufferedReader br;
try {
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
while(true) {
String response = br.readLine();
setChanged();
notifyObservers(response);
}
} catch(IOException ie) {
ie.printStackTrace();
} finally {
}
}
}
package pattern.observerpattern;
import java.util.Observable;
import java.util.Observer;
/**
* Observer 클래스
* EventSource 클래스의 이벤트 발생시 처리를 담당하게 됨
* update 메서드를 필수로 구현해야 하는 것 같음
*
* @author lsk
* @since 2009.08.26
*/
public class ResponseHandler implements Observer{
private String resp;
public void update(Observable obs, Object obj) {
if(obj instanceof String) {
resp = (String)obj;
System.out.println("\nReceived Response : " + resp);
}
}
}
package pattern.observerpattern;
/**
* Observe와 Observable(관찰할 수 있는) 객체를 생성함
* Observable 객체는 Thread로 처리되며 항상 돌면서 사용자의 key in 을 체크하게 됨
* key in 을 받으면 이 텍스트를 Observe 클래스에 보내고
* Observe 클래스는 이를 받아 처리함
*
* 한마디로 예를 위해 탄생된 프로그램-_-;;
*
* @author lsk
* @since 2009.08.26
*/
public class MyApp {
public static void main(String[] args) {
System.out.println("Enter Text > ");
final EventSource evSvc = new EventSource();
final ResponseHandler respHandler = new ResponseHandler();
evSvc.addObserver(respHandler);
Thread thread = new Thread(evSvc);
thread.start();
}
}
Observe 패턴을 대략적으로 생각해보게 되었음
자료 출처는 위키디피아의 Observable 로 검색할때 나오는 코드이며
이를 직접 토딩하여 확인해보았음
http://ko.wikipedia.org/wiki/%EC%98%B5%EC%A0%80%EB%B2%84_%ED%8C%A8%ED%84%B4
코드는 다음과 같음
package pattern.observerpattern;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Observable;
/**
* thread 로 도는 객체
* 사용자의 입력을 받으면 변경되었다는 것을 통보함(Observable)
* 통보를 받을 객체는 EventSource 를 생성할 떄 추가하게 됨
*
* @author lsk
* @since 2009.08.26
*/
public class EventSource extends Observable implements Runnable{
public void run() {
InputStreamReader isr;
BufferedReader br;
try {
isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
while(true) {
String response = br.readLine();
setChanged();
notifyObservers(response);
}
} catch(IOException ie) {
ie.printStackTrace();
} finally {
}
}
}
package pattern.observerpattern;
import java.util.Observable;
import java.util.Observer;
/**
* Observer 클래스
* EventSource 클래스의 이벤트 발생시 처리를 담당하게 됨
* update 메서드를 필수로 구현해야 하는 것 같음
*
* @author lsk
* @since 2009.08.26
*/
public class ResponseHandler implements Observer{
private String resp;
public void update(Observable obs, Object obj) {
if(obj instanceof String) {
resp = (String)obj;
System.out.println("\nReceived Response : " + resp);
}
}
}
package pattern.observerpattern;
/**
* Observe와 Observable(관찰할 수 있는) 객체를 생성함
* Observable 객체는 Thread로 처리되며 항상 돌면서 사용자의 key in 을 체크하게 됨
* key in 을 받으면 이 텍스트를 Observe 클래스에 보내고
* Observe 클래스는 이를 받아 처리함
*
* 한마디로 예를 위해 탄생된 프로그램-_-;;
*
* @author lsk
* @since 2009.08.26
*/
public class MyApp {
public static void main(String[] args) {
System.out.println("Enter Text > ");
final EventSource evSvc = new EventSource();
final ResponseHandler respHandler = new ResponseHandler();
evSvc.addObserver(respHandler);
Thread thread = new Thread(evSvc);
thread.start();
}
}