옵저버 패턴

생성일
Jan 7, 2022 07:04 AM
태그
디자인 패턴
다른 객체의 이벤트를 구독할 수 있다.
 
Observable 클래스
class Observable {
  constructor() {
    this.observers = [];
  }

  subscribe(f) {
    this.observers.push(f);
  }

  unsubscribe(f) {
    this.observers = this.observers.filter(subscriber => subscriber !== f);
  }

  notify(data) {
    this.observers.forEach(observer => observer(data));
  }
}

export default new Observable();
 
import React from "react";
import { Button, Switch, FormControlLabel } from "@material-ui/core";
import { ToastContainer, toast } from "react-toastify";
import observable from "./Observable";

function handleClick() {
  observable.notify("User clicked button!");
}

function handleToggle() {
  observable.notify("User toggled switch!");
}

function logger(data) {
  console.log(`${Date.now()} ${data}`);
}

function toastify(data) {
  toast(data, {
    position: toast.POSITION.BOTTOM_RIGHT,
    closeButton: false,
    autoClose: 2000
  });
}

observable.subscribe(logger);
observable.subscribe(toastify);

export default function App() {
  return (
    <div className="App">
      <Button variant="contained" onClick={handleClick}>
        Click me!
      </Button>
      <FormControlLabel
        control={<Switch name="" onChange={handleToggle} />}
        label="Toggle me!"
      />
      <ToastContainer />
    </div>
  );
}
 
비동기식 이벤트 기반 데이터로 작업할 때 매우 유용할 수 있다.
 
관찰자 패턴을 사용하는 것은 관심사 분리를 시행하는 좋은 방법이다. 관찰 가능한 개체는 이벤트 모니터링을 담당하고 관찰자는 단순히 수신된 데이터 처리만을 담당한다.
rxjs

Loading Comments...