サブスクライバモード

1297 ワード

#include <memory>
#include <list>
#include <iostream>

struct Notification
{
	virtual ~Notification()
	{
	}
	virtual void process() = 0;
};

class SubscriberA: public Notification
{
public:
	//Notification
	virtual void process()
	{
		std::cout << "A
"; } }; class SubscriberB: public Notification { public: //Notification virtual void process() { std::cout << "B
"; } }; class Publisher { std::list<std::shared_ptr<Notification>> _listSubscribers; public: void subscribeForNotification(std::shared_ptr<Notification> subscriber) { if (!subscriber) { return; } auto it = _listSubscribers.begin(); while (it != _listSubscribers.end()) { if (*it == subscriber) { return; } ++it; } _listSubscribers.push_back(subscriber); } void start() { notifySubscribers(); } private: void notifySubscribers() { for (auto it = _listSubscribers.begin(); it != _listSubscribers.end(); ++it) { (*it)->process(); } } }; int main() { Publisher p; p.subscribeForNotification(std::shared_ptr<Notification>(new SubscriberA())); p.subscribeForNotification(std::shared_ptr<Notification>(new SubscriberB())); p.start(); return 0; }