반응형
옵저버 패턴 (Observer Pattern)
- 행위 패턴 (Behavioral Pattern) 중 하나
=> 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
=> 1. 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지에 대해서 중점을 둔다.
=> 2. 객체 사이의 결합도를 최소화 하는 것에 중점을 둔다.
- 관찰 대상의 상태가 변화했을 때, 관찰자(Observer)에게 통지하는 패턴
- 상태 변화에 따른 처리를 기술할 때 효과적으로 활용 (MVC 패턴에서 Model과 View의 분리 등..)
- Observer 클래스에 상태 변화를 알려주고,
Observer는 다시 그 변화에 맞는 결과를 나타낸다.
"한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 정보가 자동으로 갱신되는 방식으로,
일대다(one-to-many) 의존성을 정의합니다."
- Head First Design Pattern
인터페이스 1 (Teacher)
public interface Teacher {
void subscribe(Students stu);
void unsubscribe(Students stu);
void notifyStudent(String msg);
}
인터페이스 2 (Students)
public interface Students {
void update(String msg);
}
상태 변화가 일어날 클래스 (Kim - Teacher)
import java.util.ArrayList;
import java.util.List;
public class Kim implements Teacher {
private List<Students> list = new ArrayList<>();
public void eatFood() {
System.out.println("김선생님이 밥을 먹는다.");
notifyStudent("나 밥 먹었다.");
}
public void runaway() {
System.out.println("김선생님이 도망갔다.");
notifyStudent("집 가라 얘들아.");
}
@Override
public void subscribe(Students stu) {
list.add(stu);
}
@Override
public void unsubscribe(Students stu) {
list.remove(stu);
}
@Override
public void notifyStudent(String msg) {
list.forEach(students -> students.update(msg));
}
}
관찰자 클래스 1 (Lee - Students)
public class Lee implements Students {
@Override
public void update(String msg) {
System.out.println("Lee 수신 : "+msg);
}
}
관찰자 클래스 1 (Park - Students)
public class Park implements Students {
@Override
public void update(String msg) {
System.out.println("Park 수신 : "+msg);
}
}
메인 클래스 1 (ObserverMain)
public class ObserverMain {
public static void main(String[] args) {
Kim kim = new Kim();
Students lee = new Lee();
Students park = new Park();
kim.subscribe(lee);
kim.subscribe(park);
kim.eatFood();
}
}
참고 :
반응형
'스터디 > Design Pattern' 카테고리의 다른 글
디자인 패턴 - MVC 패턴 (Model-View-Controller) (0) | 2020.06.02 |
---|---|
디자인 패턴 - 전략 패턴 (Strategy Pattern) (0) | 2020.05.31 |
디자인 패턴 - 추상 팩토리 패턴 ( Abstract Factory Pattern ) (0) | 2020.05.30 |
디자인 패턴 - 팩토리 메소드 패턴 (Factory Method Pattern) (0) | 2020.05.30 |
디자인 패턴 - 싱글턴 패턴 (Singleton Pattern) (0) | 2020.05.30 |
댓글