#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
/*
* observer패턴을 사용하지 않는다면 polling을 사용해야한다.
* cf : polling이란 주기적으로 어떠한 행위를 하는 것을 의미한다.
* -> db를 사용할 때나 알림같은 경우 polling을 하는 경우를 많이보았다..
*
* observer Interface를 가지고 있으면서 해당 Interace는 Update 함수를 가지고 있다
*
* 여러 옵저버들은 event를 주시한다.
* event에 observer들을 등록했다고 보자..
* event의 notify를 통해서 주시하고 있는 observer들의 update로 모두 호출할 수 있다 (즉각 반응가능)
*
*/
class Observer
{
public :
virtual void Update() = 0;
};
class Cat : public Observer
{
public:
void Update()
{
cout << "meow" << endl;
}
};
class Dog : public Observer
{
public:
void Update()
{
cout << "bark" << endl;
}
};
class Owner
{
public:
void Register(Observer\* observer)
{
animal.push\_back(observer);
}
void Notify()
{
for (int i = 0; i < animal.size(); ++i)
{
animal\[i\]->Update();
}
}
private:
vector<Observer\*> animal;
};
int main()
{
Owner\* owner = new Owner();
Cat\* cat = new Cat();
Dog\* dog = new Dog();
owner->Register(cat);
owner->Register(dog);
owner->Notify();
return 0;
}
'디자인패턴' 카테고리의 다른 글
Adapter패턴. (0) | 2022.05.23 |
---|---|
builder패턴(c++) (0) | 2022.05.13 |
composite패턴 (0) | 2022.05.12 |
builder()패턴 (0) | 2021.10.04 |