通常,當我看到關於觀察者模式的教程時,我會看到一種稱爲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();
}
在我看來,它仍然是觀察者模式的實現。看起來像一個非常直接的例子,我的觀察者 – mdw7326 2014-09-29 19:36:38
方法的名稱並不重要。它是重要的「模式」即。對象的安排和階級結構。 – Galik 2014-09-29 19:36:42
您認爲什麼讓您質疑它不是觀察者模式? :)綁定在那裏,模式在那裏! – zar 2014-09-30 14:06:32