ㅇTL

디자인패턴 2 - Observer & Decorator 본문

2-1/객체지향 - java

디자인패턴 2 - Observer & Decorator

정노르레기 2022. 6. 18. 22:12

개념

: 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 하는 패턴

 

- 기본 기능에 추가할 수 잇는 기능의 종류가 많이 존재 (샷추가 같은거) 

-> 추가 기능을 Decorator 클래스로 정의한 후

-> 필요한 Decorator 객체를 조합하여 추가 기능의 조합을 설계함 !

 

- 음료수 처럼 기본 abstract 클래스 하나를 만듦

- 각 음료는 그걸 상속

 

- 첨가 옵션들은

1. Beverage (기본 component 클래스) 를 상속한 기본Decorator(추상)클래스만듦

2. 각 옵션은 1클래스를 상속함

-> 각 옵션 클래스들은 beverage 객체를 각각 가지고 있음 -> 해당 음료에 해당 옵션 추가한걸 리턴하는 함수 구현

 


Observer Pattern

: 한 객체의 상태가 바뀔경우, 다른 객체들에게 알려주는 패턴 !

어떤 객체의 변경사항이 발생하였을 때 이와 연관된 객체들에게 알려주는 디자인 패턴

 

subject (1) : 서브젝트의 상태가 변경되면 observer들에게 알림메세지를 보냄

-> Observer 배열을 가지고잇다, 그래서 notify이런 함수에서 옵저버에게 바뀐 정보 전달해줌

observer (N) : 서브젝트가 상태 변경되었을 때 그에 대해 통지를 받는다

 

* 기본적으로 추상클래스로 기본을 구현하고 진짜 클래스는 그걸 상속해서 한다

Subject의 notify함수에서 -> 옵서버들의 update함수를 호출

 

Observer은 Interface ! -> 실제 클래스들에서 implements함

public abstract void update(Subject 클래스); 가짐

 

옵서버 실제 객체에서는

(- subject를 객체로 가짐

- subject에 해당 옵저버 객체를 추가해줌 (배열에) )

- update 함수가 있따 - 서브젝트에게서 정보 업데이트를 받는 함수

 (이걸 서브젝트 클래스에서 notify할때 호출한다)

*** 옵저버 객체를 호출하면서 constructor 매개변수로 subject를 넣어줌으로써 subject에 해당 옵서버를 추가한다 !!!'

constructor에서 객체저장 and 서브젝트 배열에 추가 !!

 

**내장도 있음

  • java.util.Observer (인터페이스)
  • java.util.Observable (클래스)

 

'2-1 > 객체지향 - java' 카테고리의 다른 글

14. Collections, Maps, Iterators  (0) 2022.06.19
Design pattern - Singleton  (0) 2022.06.13
14- ArrayList , Generics  (0) 2022.06.13
Interfaces and Inner Classes  (0) 2022.06.02
19- Threads  (0) 2022.05.31