[Observer 패턴]
: 객체간 1:n 의존 관계를 정의
: 한개 객체 상태가 변화될때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태를 갱신
: 일종의 푸쉬(push) 서비스
[Observer 패턴 기본 구조]
[Observer 패턴 구현하기]
- ConcreteSubject
: Observer 관리할 배열을 만들어준다 (ArrayList<Observer> observers; )
: 그리고 생성자 이용해 배열 정의
: addObserver(Observer o) 구현 (observers.add(o)')
: removeObserver(Observer o) 구현 (observer.remove(o);)
: notifyObserver() 구현 (for (Observer o : observers) { o.update(전해줄상태값); }
- Subject 인터페이스
: 위 구조에 작성된 메소드 3개 추상 선언
- Observer 인터페이스
: update() 선언. 이때 괄호안에 concreteSubject에서 전달해준 인자 타입 선언 (update(int n);)
- Observer 클래스들
update(인자값) 메서드 구현해서 인자값으로 클래스 내부 동작 실행.
[Observer 패턴 예시]
#예시1. Observer_panel (+thread 이용법)
+) Thread.sleep(슬립시간); : 해당 시간만큼 동작 중지
1. concreteSubject - PrimeObserableThread
2. Subject 인터페이스
3. Observer 인터페이스
4. LabelWindow 클래스 - Observer 클래스들중 하나
5. MainWindow 클래스(main) - 코드일부
: 생성한 Observer클래스들 observer 배열에 추가
: 버튼 누르는 동작 감지후, 해당 버튼 무슨버튼인지 구분후, Observer 배열에 observer들 각각 추가/삭제
# 예시2 - WeatherData
- Subject 인터페이스
- Observer 인터페이스
- WeatherData 클래스 : ConcreteSubject
- CurrentConditionsDisplay 클래스 : observer 클래스(생성자에 observer 배열에 추가하는 코드 들어있음)
- WeatherStation클래스 : main
# 예시3 - Swing의 actionListener
- 코드파일 따로 X.
public class SwingObserverExample {
JFrame frame; public static void main(String[] args) {
SwingObserverExample example = new SwingObserverExample();
example.go();
}
public void go() {
frame = new JFrame();
JButton button = new JButton("정말 해도 될까?");
button.addActionListener(new AngelListener());
button.addActionListener(new DevilListener());
frame.getContentPane().add( BorderLayout.CENTER, button);
frame.setSize(200, 200); frame.setVisible(true);
}
class AngelListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println("안돼. 분명 나중에 후회할거야");
}
}
class DevilListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println("당연하지. 그냥 저질러 버려!");
}
}
# 예시4 - RandomNumberGenerator 클래스
'기타 > [고급객체지향 프로그래밍]' 카테고리의 다른 글
디자인 패턴 6강. 커맨드 패턴(Command Pattern) (0) | 2019.12.10 |
---|---|
디자인 패턴 5강. 싱글턴 패턴(Singleton Pattern) (0) | 2019.12.06 |
디자인 패턴 4강. 팩토리 패턴(Factory pattern) (0) | 2019.12.02 |
디자인 패턴 3강. Decorator 패턴 (0) | 2019.10.21 |
디자인 패턴 1강. Strategy 패턴 (0) | 2019.10.18 |