當前位置:首頁 » 股票投資 » 股票與投資者觀察者模式

股票與投資者觀察者模式

發布時間: 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 09:00:24 瀏覽:935
中英科技股票研報 發布:2025-07-01 08:44:19 瀏覽:917
100兆如何炒股 發布:2025-07-01 08:40:09 瀏覽:669
如何能在股市中進出自如 發布:2025-07-01 08:34:42 瀏覽:519
重生投資玩股票的小說 發布:2025-07-01 08:19:06 瀏覽:54
什麼支撐特斯拉市值 發布:2025-07-01 08:07:06 瀏覽:2
如何調節流通的貨幣 發布:2025-07-01 08:02:15 瀏覽:562
基金盈利怎麼算 發布:2025-07-01 07:57:56 瀏覽:757
沈陽機床股票歷史數據 發布:2025-07-01 07:48:12 瀏覽:681
炒股中什麼叫短線 發布:2025-07-01 07:38:22 瀏覽:401