옵저버 패턴
객체지향과 디자인 패턴(최범균 저) 옵저버 패턴 정리한 내용입니다.
상황
문제
해결방법
public class StatusChecker extends StatusSubject {
public void check() {
Status status = loadStatus();
if(status.isNotNormal()){
super.notifyStatus(status);
}
}
private Status loadStatus(){
// ...
}
}
public abstract class StatusSubject {
private List<StatusObserver> observers = new Arraylist<StatusObserver>();
public void add(StatusObserver observer){
observers.add(observer);
}
public void remove(StatusObserver observer){
observers.remove(observer);
}
public void notifyStatus(Status status){
for(StatusObserver observer : observers){
observer.onAbnormalStatus(status);
}
}
}
public interface StatusObserver {
void onAbnormalStatus(Status status);
}
public class StatusEmailSender implements StatusObserver {
@Override
public void onAbnormalStatus(Status status) {
sendEmail(status);
}
private void sendEmail(Status status){
// 이메일 전송 코드
}
}옵저버 패턴 구현의 고려 사항
주제 객체의 통지 기능 실행 주체
옵저버 인터페이스의 분리
통지 시점에서의 주제 객체 상태
옵저버 객체의 실행 제약 조건
Last updated