프로그램/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();
    }
}