一、源代码:
#include<iostream>
#include<memory>
#include<vector>
#include<bitset>
using namespace std;
class Subject;
class Observer
{
public:
virtual void update() = 0;
virtual ~Observer() = default;
protected:
shared_ptr<Subject> _subject;
};
class Subject
{
public:
void notifyAllObserver()
{
for(const auto& observer:_observers)
{
observer->update();
}
}
int getState()
{
return _state;
}
void setState(int state)
{
this->_state = state;
notifyAllObserver();
}
void attach(shared_ptr<Observer> observer)
{
_observers.push_back(observer);
}
private:
vector<shared_ptr<Observer>> _observers={};
int _state;
};
class BinaryObserver:public Observer
{
public:
BinaryObserver(shared_ptr<Subject> subject)
{
this->_subject = subject;
}
virtual void update() override
{
bitset<10> b(_subject->getState());
cout<<" Binary String: "<<b<<endl;
}
};
class OctalObserver:public Observer
{
public:
OctalObserver(shared_ptr<Subject> subject)
{
this->_subject = subject;
}
virtual void update() override
{
cout<<" Octal String: "<<oct<<_subject->getState()<<endl;
}
};
class HexObserver:public Observer
{
public:
HexObserver(shared_ptr<Subject> subject)
{
this->_subject = subject;
}
virtual void update() override
{
cout<<" Hex String: "<<hex<<_subject->getState()<<endl;
}
};
int main()
{
shared_ptr<Subject> subject = make_shared<Subject>();
shared_ptr<Observer> b = make_shared<BinaryObserver>(subject);
shared_ptr<Observer> o = make_shared<OctalObserver>(subject);
shared_ptr<Observer> h = make_shared<HexObserver>(subject);
subject->attach(b);
subject->attach(o);
subject->attach(h);
cout<<"First state change: 15"<<endl;
subject->setState(15);
cout<<"Second state change: 10"<<endl;
subject->setState(10);
}
二、运行结果:
三、吐槽:
有点绕。。。