پیاده سازی الگوی ناظر در c++ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

پیاده سازی الگوی ناظر در c++

0 امتیاز
سلام.

قصد دارم از طریق observer pattern با استفاده از std::weak_ptr  پیاده سازیش کنم .کسی همچین کاری انجام داده؟
سوال شده مرداد 1, 1402  بوسیله ی Lori3 (امتیاز 857)   11 36 106

1 پاسخ

0 امتیاز
#include <iostream>
#include <memory>
#include <vector>
class Observer; 
class Subject {
public:
  void notifyObservers();
  void registerObserver(std::weak_ptr<Observer> obs);
private:
  std::vector<std::weak_ptr<Observer>> observers;
};
class Observer {
public:
  virtual ~Observer() {}
  virtual void update() = 0; 
};
class ConcreteObserver : public Observer {
public:
  ConcreteObserver() {
    std::cout << "ConcreteObserver created\n"; 
  }
  virtual void update() override {
    std::cout << "ConcreteObserver::update called\n";
  }
};
void Subject::notifyObservers() {
  for(std::weak_ptr<Observer> obs : observers) {
    if(auto sharedObs = obs.lock()) {
      sharedObs->update();
    }
  }
}
void Subject::registerObserver(std::weak_ptr<Observer> obs) {
  observers.push_back(obs);
}
int main() {
  auto subject = std::make_shared<Subject>();
  {
    auto observer = std::make_shared<ConcreteObserver>();
    subject->registerObserver(observer);
  }
  subject->notifyObservers();
  return 0;
}

 

پاسخ داده شده مرداد 2, 1402 بوسیله ی Lori3 (امتیاز 857)   11 36 106
...