Задать вопрос
@egorggegor

Правильно ли реализован паттерн Observer?

Привет, помогите понять, как должен выглядеть паттерн Observer, везде пишут по-разному, у всех разные диаграммы, чего в моей реализации не хватает или, может быть, что-то лишнее?
5d5f13006bfac373500169.png
5d5f130b83553102039689.png
Моя реализация (может быть, если в коде ошибке скажите пожалуйста, где что некорректно):
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;
};
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
SergeyEgorov
@SergeyEgorov
Веб разработчик
Одну строчку осталось добавить...

virtual void Notify() {
  for (int i = 0; i < followers.size(); ++i) {
    followers[i].Update();            
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы