Привет, помогите понять, как должен выглядеть паттерн Observer, везде пишут по-разному, у всех разные диаграммы, чего в моей реализации не хватает или, может быть, что-то лишнее?
Моя реализация (может быть, если в коде ошибке скажите пожалуйста, где что некорректно):
class Observer;
class Subject {
public:
virtual ~Subject() {};
virtual void attach(Observer* follower) {
followers.push_back(follower);
}
virtual void detach(int index) {
followers.erase(followers.begin() + index);
}
virtual void Notify() {
for (int i = 0; i < followers.size(); ++i) {
}
}
private:
std::vector<Observer*> followers;
};
class ConcreteSubject : public Subject {
public:
int GetState() {
return SubjectState;
}
void SetState(int NewSubjectState) {
SubjectState = NewSubjectState;
}
private:
int SubjectState;
};
class Observer {
public:
virtual ~Observer() {};
virtual void Update() = 0;
};
class ConcreteObserver : public Observer {
public:
ConcreteObserver(ConcreteSubject* subject_to_follow) {
FollowedSubject = subject_to_follow;
FollowedSubject->attach(this);
}
void Update() {
ObserverState = FollowedSubject->GetState();
}
private:
ConcreteSubject* FollowedSubject;
int ObserverState;
};