C 設計者模式 策略模式

2021-10-03 16:59:14 字數 1196 閱讀 8379

策略模式:某些物件使用的演算法可能多種多樣,經常改變,如果將這些演算法編碼到**中,會使**變得異常負責,而且有時候支援不使用的演算法可能是一種效能負擔。

對於上面描述可以舉如下的列子解釋。比如如下**所示:

#pragma once

#includeusing namespace std;

//假如我們要實現乙個功能:輸入某個國家可以相應計算出該國家的稅金;

enum tax_base

;/*1、如果需要新加德國的稅金,則enum總需要改

2、客戶端程式也需要增加乙個else if分支;

3、並且對程式效能也有影響,因為他要乙個個if判斷過去,如果你給的是jermany,那麼他只能判斷到最後乙個;

4、如果emun 和 salesorder放在不同的資料夾下,那這倆個資料夾都需要被編譯;

*/class salesorder

else if (ame_tax == tax)

else if (jap_tax == tax)

else if (jerm_tax == tax)

}private:

tax_base tax;

};

策略模式的實現:

#pragma once

#includeusing namespace std;

//基類

class taxcalfactory

;class cn_tax :public taxcalfactory

};class ame_tax :public taxcalfactory

};//在該模式下,不管他要計算哪個國家的稅率(比如jermany)只需要在加乙個class jermany_tax,繼承taxcalfactory,overwrite calculatetax函式即可。

//就不需要改客戶端程式salesorder;

//也符合開閉原則;對拓展開放,對修改關閉比如這裡對salesorder的修改應該關閉,對新增的jermany_tax開放

class salesorder

public:

double calculatetax()

private:

taxcalfactory* taxcal;

};

策略模式可以用在有多種演算法,並且需要if 或者case來判斷的情況下

c 設計者模式 工廠模式

1 面向介面程式設計 最簡單的表現形式是,你的變數要宣告成抽象基類 2 為什麼要實現面向介面程式設計 設計原則 依賴倒置原則 應該依賴抽象而不是細節。3 抽象基類是不能建立的,不能new的。4 建立物件的方法 除了在棧上 或者是在堆上建立物件,也可以通過方法返回物件。5 虛函式 執行時的依賴 模式定...

設計者模式

1.單例模式 每個new出來的例項都需要有乙個相同的方法,但是這時候如果 每個例項都新建乙個這種方法,太佔據記憶體也太慢,所以在這裡有乙個重要的判斷 如果有例項,則返回例項 如果沒有例項,則建立例項,並且返回例項。例 class createuser return createuser.ins co...

設計者模式 構建者模式

一 介紹 場景 建造乙個複雜的產品。比如 神舟飛船,iphone,這個複雜的產品建立,有這樣乙個問題需要處理 裝配這些子元件,是不是有個步驟問題?實際開發中,需要的物件,在構建時,也非常複雜,有很多步驟需要處理。建造者模式的本質 分離物件子元件的單獨構造 由builder來負責 和裝配 由direc...