본문 바로가기
디자인패턴

옵저버 패턴

by kcj3054 2023. 9. 24.

#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;  
}

참고 자료 : https://www.youtube.com/watch?v=1dwx3REUo34

'디자인패턴' 카테고리의 다른 글

Adapter패턴.  (0) 2022.05.23
builder패턴(c++)  (0) 2022.05.13
composite패턴  (0) 2022.05.12
builder()패턴  (0) 2021.10.04