//两个类均定义为基类,如要将一个类实现为观察者或目标,则需继承,
//并在具体目标中加入观察者的状态等参数以便目标实时知道观察者的对应状态
class Subject;
//观察者基类
class Observer
{
public:
explicit Observer(){}
virtual ~Observer(){}
virtual void Update(Subject*) = 0;
};
// 观察者模式中的目标
class Subject : virtual public QObject
{
Q_OBJECT
public:
explicit Subject(QObject *parent = NULL): QObject(parent){}
virtual ~Subject(){}
virtual void attach(Observer* o){
for (int i = 0; i < m_listObserver.count(); i++)
{
if(o == m_listObserver.at(i)) return;
}
m_listObserver.append(o);
}
virtual void detach(Observer* o){
m_listObserver.removeOne(o);
}
// 通知所有观察者
virtual void notify(){
/*Observer* o;*/
for (int i = 0; i < m_listObserver.count(); i++)
{
m_listObserver.value(i)->Update(this);
}
}
protected:
QList<Observer*> m_listObserver;
};