보통 Observer Pattern에 대한 자습서를 볼 때 notify
이라는 고유 한 방법이 있지만 궁금합니다. 다른 순간에 전화 할 수있는 다른 방법이 있지만이 일이 발생할 때 다른 사람들에게 알릴 필요가 있다면 어떻게해야합니까? 사건들처럼 내가 잘못하고있는거야? 아니면 여전히 관찰자 패턴을 시작합니까?아직도 관찰자 패턴?
#include <iostream>
#include <algorithm>
#include <vector>
class Observer
{
public:
virtual void notifyBefore() = 0;
virtual void notifyAfter() = 0;
};
class Subject
{
public:
void attachObserver(Observer * observer)
{
observers.push_back(observer);
}
void detachObserver(Observer * observer)
{
auto index = std::find(observers.begin(), observers.end(), observer);
if (index != observers.end())
{
observers.erase(index);
}
}
virtual void notifyBefore()
{
for (auto current : observers)
{
current->notifyBefore();
}
}
virtual void notifyAfter()
{
for (auto current : observers)
{
current->notifyAfter();
}
}
private:
std::vector<Observer *> observers;
};
class ConcreteObserver : public Observer
{
public:
void notifyBefore()
{
std::cout << "You called me before..." << std::endl;
}
void notifyAfter()
{
std::cout << "You called me after..." << std::endl;
}
};
class ConcreteSubject : public Subject
{
public:
};
int main()
{
auto subject = new ConcreteSubject;
subject->attachObserver(new ConcreteObserver);
subject->notifyBefore();
for (int i = 0; i < 5; ++i)
std::cout << i << std::endl;
subject->notifyAfter();
}
내 의견으로는 여전히 Observer 패턴의 구현입니다. 옵서버의 예가 꽤 똑바로 보입니다. – mdw7326
메소드의 이름은 중요하지 않습니다. 그것은 즉 중요한 패턴입니다. 사물의 배열과 계급 구조. – Galik
당신은 그것이 관찰자 패턴이 아니라고 질문하게 생각합니까? :) 바인딩은 거기에, 거기 패턴입니다! – zar