Chain of Responsibility

來源:互聯網
上載者:User

#include "stdafx.h"<br />#include <iostream><br />#include <Windows.h><br />#include <boost/shared_ptr.hpp></p><p>using namespace std;<br />using namespace boost;</p><p>/**<br />*@briefChain Of Responsibility 職責鏈模式,屬於GOF 23種設定模式中的行為模式的一種</p><p>*意圖:使多個對象都有機會處理請求,從而避免請求的寄件者和接收者之間的耦合關係<br />將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它為止<br />*/</p><p>typedef int Topic;</p><p>const Topic NO_HELP_TOPIC = -1;<br />const Topic TOPIC_APPLICATION = 1;<br />const Topic TOPIC_DIALOG = 2;<br />const Topic TOPIC_BUTTON = 3;</p><p>/** @brief 協助請求 */<br />class HelpHandle<br />{<br />public:<br />HelpHandle(HelpHandle* pHelpHandle,Topic topic = NO_HELP_TOPIC) : m_pHelpHandle(pHelpHandle),m_Topic(topic) {}</p><p>virtualvoidHelp()<br />{<br />if(m_pHelpHandle != NULL)<br />m_pHelpHandle->Help();<br />}<br />virtualBOOLHasHelp()<br />{<br />return m_Topic != NO_HELP_TOPIC;<br />}<br />virtualvoidSetHandle(HelpHandle* pHelpHandle,Topic topic)<br />{<br />m_pHelpHandle = pHelpHandle;<br />m_Topic = topic;<br />}</p><p>private:<br />HelpHandle*m_pHelpHandle;<br />Topicm_Topic;<br />};</p><p>/** @brief 應用程式協助 */<br />class HelpHandle_Application : public HelpHandle<br />{<br />public:<br />HelpHandle_Application(Topic topic = NO_HELP_TOPIC) : HelpHandle(NULL,topic) {}</p><p>virtualvoidHelp()<br />{<br />if(HasHelp())<br />cout << "Application HelpHandle" << endl;<br />else<br />HelpHandle::Help();<br />}<br />};</p><p>/** @brief 對話方塊協助 */<br />class HelpHandle_Dialog : public HelpHandle<br />{<br />public:<br />HelpHandle_Dialog(HelpHandle* pHelpHandle,Topic topic = NO_HELP_TOPIC) : HelpHandle(pHelpHandle,topic) {}</p><p>virtualvoidHelp()<br />{<br />if(HasHelp())<br />cout << "Dialog HelpHandle" << endl;<br />else<br />HelpHandle::Help();<br />}<br />};</p><p>/** @brief 按扭協助 */<br />class HelpHandle_Button : public HelpHandle<br />{<br />public:<br />HelpHandle_Button(HelpHandle* pHelpHandle,Topic topic = NO_HELP_TOPIC) : HelpHandle(pHelpHandle,topic) {}</p><p>virtualvoidHelp()<br />{<br />if(HasHelp())<br />cout << "Button HelpHandle" << endl;<br />else<br />HelpHandle::Help();<br />}<br />};</p><p>int _tmain(int argc, _TCHAR* argv[])<br />{<br />shared_ptr<HelpHandle_Application>pApplicationHelp(new HelpHandle_Application(TOPIC_APPLICATION));<br />shared_ptr<HelpHandle_Dialog> pDialogHelp(new HelpHandle_Dialog(pApplicationHelp.get(),TOPIC_DIALOG));<br />shared_ptr<HelpHandle_Button> pButtonHelp1(new HelpHandle_Button(pDialogHelp.get(),TOPIC_DIALOG));<br />shared_ptr<HelpHandle_Button> pButtonHelp2(new HelpHandle_Button(pDialogHelp.get(),NO_HELP_TOPIC));</p><p>pButtonHelp1->Help();<br />pButtonHelp2->Help();</p><p>/**<br />*輸出結果為<br />*Button HelpHandle<br />*Dialog HelpHandle<br />*/</p><p>system("pause");</p><p>return 0;<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.