[DP] Observer pattern

      Comments Off on [DP] Observer pattern

Dùng observer pattern khi mình muốn nhiều object theo dõi 1 object, nếu object đó có thay đổi thì nó sẽ thông báo cho tất cả những object đã đăng ký thông báo ( lưu ý cài đặt, quá trinh đăng ký qua constructor)

#include <iostream>
#include <vector>
#include <algorithm>

class Base{
public:
	virtual void notify() =0;
};

class A{
	std::vector<Base *> arr;
	public:
	void add(Base *a){
		arr.push_back(a);
	}
	void remove(Base *a){
		arr.erase(std::remove(arr.begin(),arr.end(),a),arr.end());
	}

	void update(){
		for(auto i:arr){
		  i->notify();
		}
	}
};

class Sub1:public Base{
public:
	Sub1(A &a){
		a.add(this);
	}
	virtual void notify() override {
	  std::cout << "Sub1 notify"<<std::endl;
	}
};

class Sub2: public Base{
public:
	Sub2(A &a){
	   a.add(this);
	}
	  virtual void notify() override {
		std::cout << "sub2 notify" <<std::endl; 
	}
};

int main(){
	A a;
	Sub1 s1(a);
	Sub2 s2(a);
	a.update();
	a.remove(&s1);
	a.update();
	return 0;
}