디자인 패턴 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
'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