策略模式 MFC樣例

2021-09-06 18:38:20 字數 2962 閱讀 4441

context(應用場景):

1、須要使用concretestrategy提供的演算法。

2、內部維護乙個strategy的例項。

3、 負責動態設定執行時strategy詳細的實現演算法。

4、負責跟strategy之間的互動和資料傳遞。

strategy(抽象策略類):

1、 定義了乙個公共介面,各種不同的演算法以不同的方式實現這個介面,context使用這個介面呼叫不同的演算法,一般使用介面或抽象類實現。

concretestrategy(詳細策略類):

2、 實現了strategy定義的介面,提供詳細的演算法實現。

uml類圖:

mfc樣例實現關鍵類**:

// strategy_mfcdlg.cpp : 實現檔案

//#include "stdafx.h"

#include "strategy_mfc.h"

#include "strategy_mfcdlg.h"

#include "afxdialogex.h"

#ifdef _debug

#define new debug_new

#endif

// 用於應用程式「關於」選單項的 caboutdlg 對話方塊

class caboutdlg : public cdialogex

; protected:

virtual void dodataexchange(cdataexchange* pdx); // ddx/ddv 支援

// 實現

protected:

declare_message_map()

};caboutdlg::caboutdlg() : cdialogex(caboutdlg::idd)

void caboutdlg::dodataexchange(cdataexchange* pdx)

begin_message_map(caboutdlg, cdialogex)

end_message_map()

// cstrategy_mfcdlg 對話方塊

cstrategy_mfcdlg::cstrategy_mfcdlg(cwnd* pparent /*=null*/)

: cdialogex(cstrategy_mfcdlg::idd, pparent)

void cstrategy_mfcdlg::dodataexchange(cdataexchange* pdx)

begin_message_map(cstrategy_mfcdlg, cdialogex)

on_wm_syscommand()

on_wm_paint()

on_wm_querydragicon()

on_bn_clicked(idc_button_sure, &cstrategy_mfcdlg::onbnclickedbuttonsure)

on_bn_clicked(idc_button_clear, &cstrategy_mfcdlg::onbnclickedbuttonclear)

end_message_map()

// cstrategy_mfcdlg 訊息處理程式

bool cstrategy_mfcdlg::oninitdialog()

} // 設定此對話方塊的圖示。當應用程式主窗體不是對話方塊時,框架將自己主動

// 執行此操作

seticon(m_hicon, true); // 設定大圖示

seticon(m_hicon, false); // 設定小圖示

// todo: 在此加入�額外的初始化**

m_comboboxcomp.addstring(_t("正常收費"));

m_comboboxcomp.addstring(_t("打八折"));

m_comboboxcomp.addstring(_t("滿300元返100元"));

total=0.0;

return true; // 除非將焦點設定到控制項,否則返回 true

}void cstrategy_mfcdlg::onsyscommand(uint nid, lparam lparam)

else }

// 假設向對話方塊加入�最小化button,則須要以下的**

// 來繪製該圖示。對於使用文件/檢視模型的 mfc 應用程式,

// 這將由框架自己主動完畢。

void cstrategy_mfcdlg::onpaint()

else }

//當使用者拖動最小化窗體時系統呼叫此函式取得游標

//顯示。

hcursor cstrategy_mfcdlg::onquerydragicon()

void cstrategy_mfcdlg::onbnclickedbuttonsure()

else if(strcomp=="滿300元返100元")

else if(strcomp=="打八折")

參考資料:程杰 《大話設計模式》

組合模式實現樣例

組合模式 將物件組合程樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性.主要解決 在屬性結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以像處理簡單元素一樣處理複雜元素,從而使客戶程式與複雜元素解耦 如何解決 樹枝和樹葉實現統一介面,樹枝內部組合...

裝飾模式實現樣例

裝飾模式 動態地給物件新增額外的功能,就新功能來說,裝飾器模式比生產子類更加靈活.主要解決 通常我們為了擴充套件乙個類經常使用繼承的方式,由於集成為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會膨脹.如何解決 將具體的功能劃分,同時繼承裝飾者類 關鍵 裝飾類復合和繼承元件類,具體的擴充套件類重寫...

設計模式 策略模式單例模式

策略模式 物件使用的演算法是變化的,物件是穩定的 將穩定和穩定的部分隔離開 面向介面程式設計 之後使用工廠模式單例模式 系統中特殊的類 只能出現乙個例項 設計一種方法 只能發回乙個物件 繞過常規的構造器 只提供乙個物件 方法 1.建構函式 和 拷貝函式都寫成private的 遮蔽系統的建構函式 2....