POOPOO: 배변 일기 앱
SMALL
행동패턴 목록
- 책임연쇄 패턴 (Chan of Responsibility Pattern)
- 커맨드 패턴 (Command Pattern)
- 해석자 패턴 (Interpreter Pattern)
- 반복자 패턴 (Iterator Pattern)
- 중재자 패턴 (Mediator Pattern)
- 메멘토 패턴 (Memento Pattern)
- 관찰자 패턴 (Observer Pattern)
- 상태 패턴 (State Pattern)
- 전략 패턴 (Strategy Pattern)
- 템플릿 패턴 (Template Pattern)
어떤 객체의 상태가 변함에 따라 원하는 동작을 할 필요가 있는 경우에 사용하면 좋을 것 같다.
장점
- 객체와 관찰자 간의 연결을 설명합니다.
- 브로드 캐스트 유형 통신을 지원합니다.
사용시기
- 한 객체의 상태가 변할때 다른 객체에 반영해야하는 경우
- 프레임워크가 변경되면 최소한의 변경으로 새로운 옵저버를 작성하고 향후 개선해야합니다.
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/
LIST