디자인 패턴 observer pattern(옵저버 패턴) 개념과 예제
Observer Pattern이란?
▶ 객체간 1:다 의존 관계를 정의한다. 한 개 객체 상태가 변경될 때, 그 객체와 의존 관계에 있는 모든 객체들이 자동으로 알림을 받고 상태를 갱신한다.
클래스 다이어그램과 코드로 확인하겠습니다.

계산기가 존재하며 setNumber() 을 통해서 숫자가 바뀔때마다 계산기가 가진 observer의 update()를 호출합니다. 여기서 n1, n2가 관찰 대상입니다. MinusPrint 와 PlusPrint는 관찰자입니다.
1. Observer interface
public interface Observer { void update(double n1, double n2); }
2. Subject interface
public interface Subject { void addObserver(Observer observer); void remove(Observer observer); void notifyObservers(); }
3. Calculator class
import java.util.ArrayList; import java.util.List; public class Calculator implements Subject{ private List<Observer> observerList; private double n1; private double n2; public Calculator() { observerList = new ArrayList<>(); } public void setNumber(double n1, double n2){ this.n1=n1; this.n2=n2; notifyObservers(); } @Override public void addObserver(Observer observer) { observerList.add(observer); } @Override public void remove(Observer observer) { observerList.remove(observer); } @Override public void notifyObservers() { for(Observer ob: observerList){ ob.update(n1,n2); } } }
4. PlusPrint class
public class PlusPrint implements Observer{ @Override public void update(double n1, double n2) { System.out.println(n1+n2); } }
5. MinsPrint class
public class MinusPrint implements Observer{ @Override public void update(double n1, double n2) { System.out.println(n1-n2); } }
6. Main class
public class Main { public static void main(String[] args) { Calculator calculator = new Calculator(); PlusPrint plusPrint = new PlusPrint(); MinusPrint minusPrint = new MinusPrint(); // plus observer 추가 calculator.addObserver(plusPrint); // 숫자 변경 calculator.setNumber(1,2); // minus observer 추가 calculator.addObserver(minusPrint); // 숫자 변경 calculator.setNumber(3,7); // plus observer 제거 calculator.remove(plusPrint); // 숫자 변경 calculator.setNumber(5,0); } }
7. 위의 함수를 실행했을 때 나오는 결과물

지금까지 Observer pattern을 알아보았습니다. 다음은 Decorator pattern에 관하여 포스팅하겠습니다. 감사합니다.
전체 코드는 아래에서 확인 가능합니다:)
https://github.com/rlaehdals/design-pattern
GitHub - rlaehdals/design-pattern
Contribute to rlaehdals/design-pattern development by creating an account on GitHub.
github.com
'Desing Pattern' 카테고리의 다른 글
디자인 패턴 DAO Pattern 개념과 예제 (0) | 2022.01.01 |
---|---|
디자인 패턴 (싱글톤 패턴) Singleton Pattern 개념과 예제 (0) | 2021.12.31 |
디자인 패턴 Factory Pattern 개념과 예제 (0) | 2021.12.30 |
디자인 패턴 (데코레이터 패턴) Decorator Pattern 개념과 예제 (0) | 2021.12.30 |
디자인 패턴 (전략 패턴) strategy pattern 개념과 예제 (0) | 2021.12.29 |
댓글
이 글 공유하기
다른 글
-
디자인 패턴 (싱글톤 패턴) Singleton Pattern 개념과 예제
디자인 패턴 (싱글톤 패턴) Singleton Pattern 개념과 예제
2021.12.31 -
디자인 패턴 Factory Pattern 개념과 예제
디자인 패턴 Factory Pattern 개념과 예제
2021.12.30 -
디자인 패턴 (데코레이터 패턴) Decorator Pattern 개념과 예제
디자인 패턴 (데코레이터 패턴) Decorator Pattern 개념과 예제
2021.12.30 -
디자인 패턴 (전략 패턴) strategy pattern 개념과 예제
디자인 패턴 (전략 패턴) strategy pattern 개념과 예제
2021.12.29
댓글을 사용할 수 없습니다.