개념
: 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 하는 패턴
- 기본 기능에 추가할 수 잇는 기능의 종류가 많이 존재 (샷추가 같은거)
-> 추가 기능을 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 |