Usually when I see tutorials about Observer Pattern I see an unique method called notify, but I'm wondering. What if I have different methods that can be called in different moments but needs to notify the others when this happen? Like events, am I doing this wrong? or still begin the observer pattern?
#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();
}