当前位置:首页 » 股票投资 » 股票与投资者观察者模式

股票与投资者观察者模式

发布时间: 2021-07-07 14:12:49

1. 观察者模式和发布/订阅模式的区别

观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

在这里先讲一下面向对象设计的一个重要原则——单一职责原则。因此系统的每个对象应该将重点放在问题域中的离散抽象上。因此理想的情况下,一个对象只做一件事情。这样在开发中也就带来了诸多的好处:提供了重用性和维护性,也是进行重构的良好的基础。

因此几乎所有的设计模式都是基于这个基本的设计原则来的。观察者模式的起源我觉得应该是在GUI和业务数据的处理上,因为现在绝大多数讲解观察者模式的例子都是这一题材。但是观察者模式的应用决不仅限于此一方面。

下面我们就来看看观察者模式的组成部分。

1) 抽象目标角色(Subject):目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现。

2) 抽象观察者角色(Observer):为那些在目标发生改变时需要获得通知的对象定义一个更新接口。抽象观察者角色主要由抽象类或者接口来实现。

3) 具体目标角色(Concrete Subject):将有关状态存入各个Concrete Observer对象。当它的状态发生改变时, 向它的各个观察者发出通知。

4) 具体观察者角色(Concrete Observer):存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。在本角色内也可以维护一个指向Concrete Subject对象的引用。

2. 观察者模式是什么

官方的定义:
The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically. (观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新)

3. 什么是观察者模式(Observer)

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己 观察者模式的组成 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类或接口来实现。 抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。 从AWT1.1开始图形系统的事件模型采用观察者模式,因此观察者模式在Java语言中的地位极其重要 在xml解析中的SAX也采用了观察者模式来实现 Java也提供了对观察者模式的内置支持 Observable类用于创建可以观测到你的程序中其他部分的子类。当这种子类的对象发生变化时,观测类被通知。观测类必须实现定义了update(

4. 请教下这是不是观察者模式

是,java Swing中事件处理就是这种方法,在Swing中被称为监听器,或者事件监听

5. 观察者模式的例子

#include<iostream>#include<set>#include<string>usingnamespacestd;/////////////////////抽象模式定义classCObservable;//观察者,纯虚基类classCObserver{public:CObserver::CObserver(){};virtualCObserver::~CObserver(){};//当被观察的目标发生变化时,通知调用该方法//来自被观察者pObs,扩展参数为pArgvirtualvoidUpdate(CObservable*pObs,void*pArg=NULL)=0;};//被观察者,即SubjectclassCObservable{public:CObservable():m_bChanged(false){};virtual~CObservable(){};//注册观察者voidAttach(CObserver*pObs);//注销观察者voidDetach(CObserver*pObs);//注销所有观察者voidDetachAll();//若状态变化,则遍历观察者,逐个通知更新voidNotify(void*pArg=NULL);//测试目标状态是否变化boolHasChanged();//获取观察者数量intGetObserversCount();protected://设置状态变化!!!必须继承CObservable才能设置目标状态voidSetChanged();//初始化目标为未变化状态voidClearChanged();private:boolm_bChanged;//状态set<CObserver*>m_setObs;//set保证目标唯一性};/////////////////////抽象模式实现voidCObservable::Attach(CObserver*pObs){if(!pObs)return;m_setObs.insert(pObs);}voidCObservable::Detach(CObserver*pObs){if(!pObs)return;m_setObs.erase(pObs);}voidCObservable::DetachAll(){m_setObs.clear();}voidCObservable::SetChanged(){m_bChanged=true;}voidCObservable::ClearChanged(){m_bChanged=false;}boolCObservable::HasChanged(){returnm_bChanged;}intCObservable::GetObserversCount(){returnm_setObs.size();}voidCObservable::Notify(void*pArg/*=NULL*/){if(!HasChanged())return;cout<<notifyobservers…<<endl;ClearChanged();set<CObserver*>::iteratoritr=m_setObs.begin();for(;itr!=m_setObs.end();itr++){(*itr)->Update(this,pArg);}}/////////////////////具体应用类定义和实现//bloger是发布者,即被观察者(subject)classCBloger:publicCObservable{public:voidPublish(conststring&strContent){cout<<blogerpublish,content:<<strContent<<endl;SetChanged();Notify(const_cast<char*>(strContent.c_str()));}};//portal是发布者,即被观察者(subject)classCPortal:publicCObservable{public:voidPublish(conststring&strContent){cout<<portalpublish,content:<<strContent<<endl;SetChanged();Notify(const_cast<char*>(strContent.c_str()));}};//RSS阅读器,观察者classCRSSReader:publicCObserver{public:CRSSReader(conststring&strName):m_strName(strName){}virtualvoidUpdate(CObservable*pObs,void*pArg=NULL){char*pContent=static_cast<char*>(pArg);//观察多个目标if(dynamic_cast<CBloger*>(pObs)){cout<<m_strName<<updatedfrombloger,content:<<pContent<<endl;}elseif(dynamic_cast<CPortal*>(pObs)){cout<<m_strName<<updatedfromportal,content:<<pContent<<endl;}}private:stringm_strName;};//Mail阅读器,观察者classCMailReader:publicCObserver{public:CMailReader(conststring&strName):m_strName(strName){}virtualvoidUpdate(CObservable*pObs,void*pArg=NULL){char*pContent=static_cast<char*>(pArg);if(dynamic_cast<CBloger*>(pObs)){cout<<m_strName<<updatedfrombloger,content:<<pContent<<endl;}if(dynamic_cast<CPortal*>(pObs)){cout<<m_strName<<updatedfromportal,content:<<pContent<<endl;}}private:stringm_strName;};/////////////////Mainintmain(){//目标(被观察者)CBloger*pBloger=newCBloger();CPortal*pPortal=newCPortal();//观察者.一个观察者可以观察多个目标CRSSReader*pRssReader=newCRSSReader(rssreader);CMailReader*pMailReader=newCMailReader(mailreader);pBloger->Attach(pRssReader);//bloger注册观察者pBloger->Attach(pMailReader);//bloger注册观察者pPortal->Attach(pRssReader);//portal注册观察者pPortal->Attach(pMailReader);//portal注册观察者//博客发布信息pBloger->Publish(博客分享设计模式);cout<<endl;//门户发布信息pPortal->Publish(门户分享设计模式);cout<< portaldetachedmailreader<<endl;pPortal->Detach(pMailReader);cout<<portalobserverscount:<<pPortal->GetObserversCount()<<endl<<endl;pPortal->Publish(门户分享设计模式);system(pause);return0;}

6. 观察者模式和中介者模式的区别

1.在Obsever模式中, 不存在封装约束的单一对象。Observer 和 Subject 必须合作才能维持约束。
2.Communication(通讯)模式由观察者和目标互联的方式决定:单一目标通常有很多观察者,有时一个目标的观察者是另一个观察者的目标。
3.Mediator 和 Observer 都能促进松耦合,然后Mediator 模式通过限制对象严格通过Mediator 进行通信来实现这个个目的。
4.Observer 模式创建观察者对喜爱那个,观察者对象向订阅它们的对喜爱那个发布其感兴趣的事件。

7. 观察者模式的基本简介

观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

8. 什么是观察者模式`

观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

在这里先讲一下面向对象设计的一个重要原则——单一职责原则。因此系统的每个对象应该将重点放在问题域中的离散抽象上。因此理想的情况下,一个对象只做一件事情。这样在开发中也就带来了诸多的好处:提供了重用性和维护性,也是进行重构的良好的基础。

因此几乎所有的设计模式都是基于这个基本的设计原则来的。观察者模式的起源我觉得应该是在GUI和业务数据的处理上,因为现在绝大多数讲解观察者模式的例子都是这一题材。但是观察者模式的应用决不仅限于此一方面。

下面我们就来看看观察者模式的组成部分。

1) 抽象目标角色(Subject):目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由抽象类或者接口来实现。

2) 抽象观察者角色(Observer):为那些在目标发生改变时需要获得通知的对象定义一个更新接口。抽象观察者角色主要由抽象类或者接口来实现。

3) 具体目标角色(Concrete Subject):将有关状态存入各个Concrete Observer对象。当它的状态发生改变时, 向它的各个观察者发出通知。

4) 具体观察者角色(Concrete Observer):存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。在本角色内也可以维护一个指向Concrete Subject对象的引用。

9. 观察者模式的实现方式

观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色:观察者和被观察对象。在刚才的例子中,业务数据是被观察对象,用户界面是观察者。观察者和被观察者之间存在“观察”的逻辑关联,当被观察者发生改变的时候,观察者就会观察到这样的变化,并且做出相应的响应。如果在用户界面、业务数据之间使用这样的观察过程,可以确保界面和数据之间划清界限,假定应用程序的需求发生变化,需要修改界面的表现,只需要重新构建一个用户界面,业务数据不需要发生变化。

10. 谁给我解释下啥叫做观察者模式

官方的定义:

The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically. (观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新)

热点内容
今年股市从什么时候开始牛起来的 发布:2025-07-01 16:13:19 浏览:569
投资者对单个股票 发布:2025-07-01 16:02:01 浏览:487
金融系列分为哪些 发布:2025-07-01 15:52:25 浏览:509
金融学哪些专业适合女生学 发布:2025-07-01 15:46:58 浏览:188
中美金融如何挂钩 发布:2025-07-01 15:05:19 浏览:145
当老公只想炒股不想上班怎么办 发布:2025-07-01 15:04:27 浏览:600
里拉大跌为什么新兴货币贬值 发布:2025-07-01 14:56:35 浏览:991
普通人什么水平炒股 发布:2025-07-01 14:48:55 浏览:21
建设银行股票历史交易 发布:2025-07-01 14:48:51 浏览:388
风车理财怎么下载 发布:2025-07-01 14:46:23 浏览:726