"옵저버 패턴"의 두 판 사이의 차이

6번째 줄: 6번째 줄:


[[파일:Observer.svg|500px]]
[[파일:Observer.svg|500px]]
==예제==
<source lang='java'>
import java.util.Observable;          //Observable is here
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class EventSource extends Observable implements Runnable {
    public void run() {
        try {
            final InputStreamReader isr = new InputStreamReader(System.in);
            final BufferedReader br = new BufferedReader(isr);
            while (true) {
                String response = br.readLine();
                setChanged();
                notifyObservers(response);
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class ResponseHandler implements Observer {
    private String resp;
    public void update(Observable obj, Object arg) {
        if (arg instanceof String) {
            resp = (String) arg;
            System.out.println("\nReceived Response: " + resp );
        }
    }
}
public class MyApp {
    public static void main(String[] args) {
        System.out.println("Enter Text >");
        // create an event source - reads from stdin
        final EventSource eventSource = new EventSource();
        // create an observer
        final ResponseHandler responseHandler = new ResponseHandler();
        // subscribe the observer to the event source
        eventSource.addObserver(responseHandler);
        // starts the event thread
        Thread thread = new Thread(eventSource);
        thread.start();
    }
}
</source>


==같이 보기==
==같이 보기==

2013년 2월 24일 (일) 12:01 판

1 개요

observer pattern
옵저버 패턴
  • 수신객체[1]들을 등록해두고 상태변화가 있을 때 통지해주는 패턴
  • 발행-구독 모델을 따르는 디자인 패턴

Observer.svg

2 예제

import java.util.Observable;          //Observable is here
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class EventSource extends Observable implements Runnable {
    public void run() {
        try {
            final InputStreamReader isr = new InputStreamReader(System.in);
            final BufferedReader br = new BufferedReader(isr);
            while (true) {
                String response = br.readLine();
                setChanged();
                notifyObservers(response);
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public class ResponseHandler implements Observer {
    private String resp;
    public void update(Observable obj, Object arg) {
        if (arg instanceof String) {
            resp = (String) arg;
            System.out.println("\nReceived Response: " + resp );
        }
    }
}

public class MyApp {
    public static void main(String[] args) {
        System.out.println("Enter Text >");
 
        // create an event source - reads from stdin
        final EventSource eventSource = new EventSource();
 
        // create an observer
        final ResponseHandler responseHandler = new ResponseHandler();
 
        // subscribe the observer to the event source
        eventSource.addObserver(responseHandler);
 
        // starts the event thread
        Thread thread = new Thread(eventSource);
        thread.start();
    }
}

3 같이 보기

4 주석

  1. =옵저버(observer)=리스너(listener)

5 참고 자료

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}