The Observer design pattern is a perfect fit for scenario where you want to notify multiple subscribers about updates.

#include <vector>

class Observer {
public:
  virtual void update(const std::string& message) = 0;
};

class Subject {
public:
  virtual void registerObserver(Observer* observer) = 0;
  virtual void unregisterObserver(Observer* observer) = 0;
  virtual void notify(const std::string& message) = 0;

protected:
  std::vector<Observer*> observers_;
};

class NewsFeed : public Subject {
public:
  void publishNews(const std::string& news) {
    // Update state
    news_ = news;
    notify(news);
  }

private:
  std::string news_;

  void registerObserver(Observer* observer) override {
    observers_.push_back(observer);
  }

  void unregisterObserver(Observer* observer) override {
    // Implement logic to remove observer from vector
  }

  void notify(const std::string& message) override {
    for (auto observer : observers_) {
      observer->update(message);
    }
  }
};

class User : public Observer {
public:
  void update(const std::string& message) override {
    std::cout << "User received update: " << message << std::endl;
  }
};

int main() {
  NewsFeed newsFeed;
  User user1, user2;

  newsFeed.registerObserver(&user1);
  newsFeed.registerObserver(&user2);

  newsFeed.publishNews("Breaking news!");

  return 0;
}

Follow more posts @ https://jdecodes.wordpress.com

My all design pattern articles :

It’s Jdecoder

I am trying to decode the concepts into simple words and documenting items i know or currently learning.

Let’s connect

Recent posts

Design a site like this with WordPress.com
Get started