Tags
- oraclejdk
- EntityGraph
- springboot
- with jdk
- 전략패턴
- restcontroller
- 폰트어썸
- fontawesome
- Observer Pattern
- Docker
- 디자인패턴
- openapispec
- 도커
- Spring Cloud
- Openjdk
- kotlin
- 무료 아이콘 폰트
- java_to_kotlin
- 옵저버패턴
- 라즈베리파이 클러스터
- 라즈베리파이
- QueryDSL
- Spring
- remix icon
- OneToMany
- spring cloud contract
- restdocs
- arc browser
- java
- 리믹스아이콘
Archives
- Today
- Total
< Dev-Kidult />
디자인 패턴 - 옵저버패턴(Observer pattern) with custom 본문
전 글에서 jdk에 구현되어 있는 observer interface와 observable class를 상속받아 옵저버패턴을 구현 한 예시를 보여드렸습니다.
jdk에 있는 observable이 class라서 상속 때문에 확장성의 제한 등 제약사항이 있어 직접 인터페이스로 구현하는 방법을 보여드리겠습니다.
먼저 observer와 observable을 interface로 만들어 줍니다.
public interface Observer {
void update(Observable o);
}
public interface Observable {
void addObserver(Observer o);
void deleteObserver(Observer o);
void notifyObservers();
}
그리고 observer와 observable를 상속받아 상세 구현을 해줍니다.
class WeatherData implements Observable {
private List<Observer> observers;
private double temperature; // 온도
private double humidity; // 습도
private WeatherStatus weatherStatus; // 날씨상태
@Override
public void addObserver(Observer o) {
this.observers.add(o);
}
@Override
public void deleteObserver(Observer o) {
this.observers.remove(o);
}
@Override
public void notifyObservers() {
observers.forEach(observer -> observer.update(this));
}
}
전 글에서는 못 봤던 observers라는 필드와 나머지 addObserver, deleteObserver 그리고 notifyObservers라는 부분이 있습니다.
observer들을 직접 담아줄 필드와 나머지 직접 observer pattern에 필요한 함수들을 구현해준 모습입니다.
필요에 따라 더 많은 함수를 구현해 줄 수 있습니다. (ex. jdk에 구현되어있는 count라던가 기타 등등)
그리고 observer를 상속받은 클래스들은 전과 같습니다.
지금까지는 push방식의 observable객체가 일방적으로 데이터를 밀어 넣어줬다면 다음에는 관찰하는 객체가 필요에 의해 데이터를 당겨 받는 pull방식의 옵저버패턴을 구현한 포스팅으로 찾아뵙겠습니다.
반응형
'개발 > Etc' 카테고리의 다른 글
[장난감프로젝트] - 1. 개인서버를 구성해볼까? (0) | 2022.08.08 |
---|---|
aws cli를 사용해보자 (0) | 2021.03.23 |
디자인 패턴 - 옵저버패턴(Observer pattern) with pull (0) | 2019.07.22 |
About docker(도커) #2 설치부터 실행까지 for MacOS (0) | 2018.09.11 |
About docker(도커) #1 docker란? (0) | 2018.08.01 |
Comments