헤드퍼스트 디자인 패턴 (옵저버 패턴)

존스노우·2024년 3월 27일
0

디자인패턴

목록 보기
1/4

옵저버 패턴

  • 중요한 일이 일어날 때? 새 소식을 알려 줄 수 있는 패턴

  • 우리가 개발해야될 기상 스테이션 !

  • weatherData 기상 스테이션에서 갱신된 w정보를 가져옴

  • get함수를 써서 필요 데이터를 가져온다

  • 갱신된 값을 가져올시 측청 변경 함수가 호출됨.

public void measurementsChanged(){

// 구현 코드 작성

}
  • 구현 조건 디스플레이 / 기상 통계 디스플레이 / 기상 예보 디스플레이

  • 총 3개를 구현해야됨.

  • 소프트 웨어 개발에서 바뀌지 않는 단 하나?

  • 변화

  • 나중에 기상스테이션을 활용해 디스플레이가 더늘어 나면?

  • 요소를 빼거나 더하거나 어떻게 대처해야될까?

public class WeatherData{

// 인수턴스변수 선언

public void mesurementsChanged(){

float temp - getTemerature()
float humidity = getHumidity();
float pressure = getPRessure();

currentConditionsDisplay.update(temp, humidity ,pressure);
staticsticsDisplay.update(temp, humidity , pressure);
forecastDisplay.update(temp, humidity, pressure);

) 요런식?
  • 최신측정 값들을 받아서 다시 디스플레이 셋팅




  • 최종코드
  • 신기한패턴 과연 어디에 활용이 될까?
  • 기본예제로 이런 코드구나 했는대
  • 예상대로 어디서 사용하나했떠니
  • 대표적인 eventPublisher!
  • 메세지 큐도 해당 된다.

pull 방식 변경


  • 이런식으로 코드 실행해도 정상동작 흐음
  • push / pull 방식

  • 간단 요약 정리.

정리

  • 한 객체에서 변경이 일어났을때 방송처럼 퍼지는?

  • 내가 이해하기 쉬운방법은 흔히 사용하는 이벤트 리스너 사용처리.

  • push/pull 방식은 음.. 보통 push방식을 사용을 많이해서

  • pull 방식은 잘이해가안된다

  • 답변 받은예시 흐음.

  • 상호작용하는 객체사이에서 가능하면 느슨한 결합 사용.

디자인 원칙 경시대회

  1. 변경이 되는 부분과 변경이 되지않는 부분
  • 주제는 상태가 변할수있는 변경 가능
  • 옵저버와 분리되어 설계
  • 새로운 옵저버를 추가해도 주제는 변하지않고 추상안정적.
  • 변경되는부분 : 주제와 : 옵저버 구현체
  • 변경되지않는 부분 : 옵저버 인터페이스
  1. 구현보다 인터페이스 맞춰서 프로그래밍
  • 주제와 옵저버는 인터페이스 기반 동작
  • 주제는 특정 옵저버보다 옵저버 인터페이스에 맞춰 프로그래밍
  • 옵저버 객체역시 옵처버 인터페이스 구현만
  • 주제와 옵저버 구현체 간의 결합 낮춤!
  1. 컴포지션
  • 주제가 옵저버를 직접 상속 대신 옵저버 목록 포함
  • 이를 통해 옵저버 간의 관계 동적 번경 및 추가 제거 가능
  • 상속대신 컴포지션으로 구현함으로써 주제와 옵저버 간의 결합을 낮추고 변경 유연가능 설계
profile
어제의 나보다 한걸음 더

0개의 댓글