[자바 디자인 패턴] 행동패턴 - 관찰자 패턴

2021. 3. 15. 17:30 JAVA/Design Patterns

행동패턴 목록

 

어떤 객체의 상태가 변함에 따라 원하는 동작을 할 필요가 있는 경우에 사용하면 좋을 것 같다.

 

장점

 - 객체와 관찰자 간의 연결을 설명합니다.

 - 브로드 캐스트 유형 통신을 지원합니다.

 

사용시기

 - 한 객체의 상태가 변할때 다른 객체에 반영해야하는 경우

 - 프레임워크가 변경되면 최소한의 변경으로 새로운 옵저버를 작성하고 향후 개선해야합니다.

 

UML

 

Observer Class : ResponseHandler1, Responsehandler2

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

 

Observable Class : EventSource

public class EventSource extends Observable implements Runnable {  
    @Override  
    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();  
        }  
    }  
}

 

Operation Class : ObserverDesignPatternDemo

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

 

 

출처 : https://www.javatpoint.com/

know-one-by-one.tistory.com/57