Observer Pattern (감시자 패턴)
목적
https://ko.wikipedia.org/wiki/%EC%98%B5%EC%84%9C%EB%B2%84_%ED%8C%A8%ED%84%B4
사용 시나리오
[Subject]
class ClockTimer { public: void RegisterObserver(TimeObserver* observer) { observerList.push_back(observer); } void Detach(TimeObserver* observer){ } void Tick() { cout<<"time is ticking"<<endl;
NotifyObservers();
}
private:
vector<TimeObserver*> observerList; void NotifyObservers() { double currentTime = 0; for(int i = 0; i < observerList.size(); i++) { TimeObserver* observer = observerList[i]; observer->Update(currentTime); } } };
[Observer]
class TimeObserver { public: virtual ~TimeObserver(){}; virtual void Update(double time) = 0; };
[Concrete Observer]
class DigitalTimeObserver : public TimeObserver { public: virtual void Update(double time) { cout<<"Update digital time"<<endl; } }; class AnalogTimeObserver : public TimeObserver { public: virtual void Update(double time) { cout<<"Update analog time"<<endl; } };
[사용 예 main]
int main(int argc, const char * argv[]) { AnalogTimeObserver* analogTimeObserver = new AnalogTimeObserver(); DigitalTimeObserver* digitalTimeObserver = new DigitalTimeObserver(); ClockTimer* timer = new ClockTimer(); timer->RegisterObserver(analogTimeObserver); timer->RegisterObserver(digitalTimeObserver); timer->Tick();//시간상태 변함 return 0; }
실행결과
time is ticking
Update analog time
Update digital time
'Design Patterns > Behavioral Patterns' 카테고리의 다른 글
Command Pattern (C++) (0) | 2019.12.22 |
---|---|
Chain of Responsibility Pattern (C++) (0) | 2019.12.15 |
Behavior Pattern (행동 패턴) (0) | 2019.12.15 |
Template Method Pattern (C++) (0) | 2019.08.04 |
Strategy Pattern (C++) (0) | 2019.07.07 |
Observer Pattern (감시자 패턴)
목적
https://ko.wikipedia.org/wiki/%EC%98%B5%EC%84%9C%EB%B2%84_%ED%8C%A8%ED%84%B4
사용 시나리오
[Subject]
class ClockTimer { public: void RegisterObserver(TimeObserver* observer) { observerList.push_back(observer); } void Detach(TimeObserver* observer){ } void Tick() { cout<<"time is ticking"<<endl;
NotifyObservers();
}
private:
vector<TimeObserver*> observerList; void NotifyObservers() { double currentTime = 0; for(int i = 0; i < observerList.size(); i++) { TimeObserver* observer = observerList[i]; observer->Update(currentTime); } } };
[Observer]
class TimeObserver { public: virtual ~TimeObserver(){}; virtual void Update(double time) = 0; };
[Concrete Observer]
class DigitalTimeObserver : public TimeObserver { public: virtual void Update(double time) { cout<<"Update digital time"<<endl; } }; class AnalogTimeObserver : public TimeObserver { public: virtual void Update(double time) { cout<<"Update analog time"<<endl; } };
[사용 예 main]
int main(int argc, const char * argv[]) { AnalogTimeObserver* analogTimeObserver = new AnalogTimeObserver(); DigitalTimeObserver* digitalTimeObserver = new DigitalTimeObserver(); ClockTimer* timer = new ClockTimer(); timer->RegisterObserver(analogTimeObserver); timer->RegisterObserver(digitalTimeObserver); timer->Tick();//시간상태 변함 return 0; }
실행결과
time is ticking
Update analog time
Update digital time
'Design Patterns > Behavioral Patterns' 카테고리의 다른 글
Command Pattern (C++) (0) | 2019.12.22 |
---|---|
Chain of Responsibility Pattern (C++) (0) | 2019.12.15 |
Behavior Pattern (행동 패턴) (0) | 2019.12.15 |
Template Method Pattern (C++) (0) | 2019.08.04 |
Strategy Pattern (C++) (0) | 2019.07.07 |