以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码
//Subject.h
#pragma once #include<list> #include<string> typedef std::string State; class Observer; class Subject { public: virtual ~Subject(); virtual void Attach(Observer* obv); virtual void Detach(Observer* obv); virtual void Notify(); virtual void SetState(const State& st) = 0; virtual State GetState() = 0; protected: Subject(); private: std::list<Observer*>*_obs; }; class ConcreateSubject :public Subject { public: ConcreateSubject(); ~ConcreateSubject(); void SetState(const State& st); State GetState(); protected: private: State _st; };
//Subject.cpp
#include"Subject.h" #include"Observer.h" #include<iostream> #include<list> typedef std::string state; Subject::Subject() { _obs = new std::list<Observer*>; } Subject::~Subject() {} void Subject::Attach(Observer* obs) { _obs->push_front(obs); } void Subject::Detach(Observer* obs) { if (obs != NULL) _obs->remove(obs); } void Subject::Notify() { for (std::list<Observer*>::iterator it = _obs->begin(); it != _obs->end(); ++it) { (*it)->Update(this); } } ConcreateSubject::ConcreateSubject() { _st = "