观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
main(),
IObservable,被观察者接口
CHanFeiZiObservable,被观察者韩非子
IObserver,观察者接口
CLiSiObserver,观察者李斯
CZhouSiObserver观察者周斯
说明:将观察者聚集到被观察者韩非子身边,韩非子的每一个举动都会通知给观察者,如李斯或周斯。
注意:最多允许一个对象既是观察者也是被观察者。就像数据库中的触发器一样,成为一个复杂的链就很难维护了。观察者类似于委托的处理方式。
void no_use_Observer()
{
//注未使用模式调用ICorp、CLeaf、CBranch这三个类来组织。
}
void no_use_Observer_new()
{
HanFeiZiNew hanfeizi;
hanfeizi.HaveBreakfast();
hanfeizi.HaveFun();
}
void use_Observer()
{
IObserver *pLiSi = new LiSiObserver();
IObserver *pZhouSi = new CZhouSiObserver();
HanFeiziObservable *pHanFeiZi = new HanFeiziObservable();
pHanFeiZi->AddObserver(pLiSi);
pHanFeiZi->AddObserver(pZhouSi);
pHanFeiZi->HaveBreakfast();
delete pLiSi;
pLiSi = NULL;
delete pZhouSi;
pZhouSi = NULL;
delete pHanFeiZi;
pHanFeiZi = NULL;
}
int main()
{
//未使用模式的调用;比较原始的方法,用线程来观察。。
no_use_Observer();
//把李斯这个类聚集到韩非子这个类上。
no_use_Observer_new();
//使用组合模式后的调用;更抽象的方式,想要观察韩非子的人多了去了,不可能只允许李斯观察。。
use_Observer();
return 0;
}
main(),
IObservable,被观察者接口
CHanFeiZiObservable,被观察者韩非子
IObserver,观察者接口
CLiSiObserver,观察者李斯
CZhouSiObserver观察者周斯
说明:将观察者聚集到被观察者韩非子身边,韩非子的每一个举动都会通知给观察者,如李斯或周斯。
注意:最多允许一个对象既是观察者也是被观察者。就像数据库中的触发器一样,成为一个复杂的链就很难维护了。观察者类似于委托的处理方式。
void no_use_Observer()
{
//注未使用模式调用ICorp、CLeaf、CBranch这三个类来组织。
}
void no_use_Observer_new()
{
HanFeiZiNew hanfeizi;
hanfeizi.HaveBreakfast();
hanfeizi.HaveFun();
}
void use_Observer()
{
IObserver *pLiSi = new LiSiObserver();
IObserver *pZhouSi = new CZhouSiObserver();
HanFeiziObservable *pHanFeiZi = new HanFeiziObservable();
pHanFeiZi->AddObserver(pLiSi);
pHanFeiZi->AddObserver(pZhouSi);
pHanFeiZi->HaveBreakfast();
delete pLiSi;
pLiSi = NULL;
delete pZhouSi;
pZhouSi = NULL;
delete pHanFeiZi;
pHanFeiZi = NULL;
}
int main()
{
//未使用模式的调用;比较原始的方法,用线程来观察。。
no_use_Observer();
//把李斯这个类聚集到韩非子这个类上。
no_use_Observer_new();
//使用组合模式后的调用;更抽象的方式,想要观察韩非子的人多了去了,不可能只允许李斯观察。。
use_Observer();
return 0;
}