261 words
1 minutes
옵저버 패턴
옵저버 패턴(Observer Pattern)
특정 값(state)가 변경됐는지 관찰을 하고, 값이 수정이 됐다면 이벤트를 발생시키는 패턴입니다.
쓰는곳
이 패턴은 FE에서 매우많이 쓰입니다.react
, leptos
, vue
같은 프레임워크의 State가 Observer패턴을 사용해 만들어젔고,
프로그램에서 알림을 보내는것도 옵저버 패턴이라고 할 수 있다.
예시코드
trait Observer<T> {
fn update(&self, state: T);
}
struct Subject<T: Default + Clone> {
observers: Vec<Box<dyn Observer<T>>>,
state: T,
}
impl<T: Default + Clone> Subject<T> {
fn new() -> Self {
Subject {
observers: Vec::new(),
state: T::default(),
}
}
fn attach(&mut self, observer: Box<dyn Observer<T>>) {
self.observers.push(observer);
}
fn set_state(&mut self, state: T) {
self.state = state;
self.notify();
}
fn notify(&self) {
for observer in &self.observers {
observer.update(self.state.clone());
}
}
}
impl Observer<i32> for i32 {
fn update(&self, state: i32) {
println!("Changed State: {} -> {}", self, state);
}
}
fn main() {
let mut subject = Subject::new();
let observer1 = Box::new(10);
let observer2 = Box::new(2);
subject.attach(observer1);
subject.attach(observer2);
subject.set_state(1);
}
실행
장점
- 이벤트 처리시 객채를 독립적으로 동작하게 할수 있다.