国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

策略模式和簡單工廠模式的代碼實現(xiàn)(C++設(shè)計模式)

2023-07-27 01:56 作者:silent_ice  | 我要投稿

定義:行為型模式的一種,表現(xiàn)為一個類的行為的算法可以在運行時更改。

目的:定義一系列算法,把它們封裝成concretestrategy,讓它們彼此可替換

在有大量算法相似的情況下取代if else。并且自由度高容易拓展。

缺點:策略類都需要對外暴露,若策略多于4個,考慮使用混合模式解決策略膨脹。

類圖

strategy實現(xiàn)策略所必須的接口,concretestrategy實現(xiàn)strategy角色的接口,即負(fù)責(zé)實現(xiàn)具體策略(方法,算法)

實例

策略定義了一種互換使用的算法,可以根據(jù)實際需求使用bus,car or texi。

策略模式的實現(xiàn):高速緩存(Cache)的替換算法。

cache缺失時,cache控制器選擇cache中的一行,并用獲取的數(shù)據(jù)替換他

定義Cache,關(guān)鍵在于如何指定替換算法。

替換算法的定義

定義抽象接口和具體替換算法

方法之一:通過參數(shù)指定,傳入標(biāo)簽??蛻糁恍枰浪惴?biāo)簽,不需要知道具體定義

enum RA {LRU,FIFO,RANDOM};//標(biāo)簽

class Cache

{

private:

????????ReplaceAlgorithm *m_ra;

public:

????????Cache(enum RA ra)

{

????????if(ra==LRU)

????????????m_ra=new LRU_ReplaceAlgorithm();

????????else if(ra==FIFO)

????????????m_ra=....

.....

}

????~Cache() {delete m_ra;}

????void Replace() {m_ra->Replace();}

}//Cache的定義用到了簡單工廠模式,由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定創(chuàng)建哪一個產(chǎn)品類。該 模式核心在于,對于一個父類的多個繼承子類,工廠對象的工廠函數(shù)根據(jù)用戶輸入,自動new一個子類對象并返回其父類指針,這樣利用父類指針執(zhí)行父類的虛函數(shù),就可以動態(tài)綁定子類的重寫函數(shù),實現(xiàn)多態(tài)。

下列展示簡單工廠模式代碼:

分別定義產(chǎn)品類型,抽象產(chǎn)品類和具體產(chǎn)品類,在工廠類中根據(jù)c值動態(tài)選擇產(chǎn)生哪一類對象
測試代碼


編譯結(jié)果

對于工廠模式的設(shè)計核心在于降低耦合,降低各個模塊,各個類的聯(lián)系,避免改一處,其他都要改。又被稱為類的創(chuàng)建型模式:通過專門定義一個類來負(fù)責(zé)創(chuàng)建其他類的實例,被創(chuàng)建的實例通常有共同的父類(抽象接口)




具體工廠創(chuàng)建具體類(工廠創(chuàng)建葡萄,蘋果)
工廠返回值為抽象類(工廠返回值為水果類)(父類指針指向子類對象)
具體產(chǎn)品繼承于抽象類(葡萄,蘋果繼承于水果類)(繼承+虛函數(shù)重寫)

簡單工廠模式利用多態(tài)性不管具體產(chǎn)品返回抽象產(chǎn)品,利用封裝性,內(nèi)部產(chǎn)品發(fā)生變化外部使用者不受影響。缺點:新增產(chǎn)品時去修改工廠類??赏卣沟豢尚薷?。


策略模式和簡單工廠模式的代碼實現(xiàn)(C++設(shè)計模式)的評論 (共 條)

分享到微博請遵守國家法律
金寨县| 广宁县| 阿瓦提县| 奉化市| 扎赉特旗| 阿瓦提县| 行唐县| 淮北市| 阳西县| 武强县| 河曲县| 策勒县| 皮山县| 句容市| 舞钢市| 松溪县| 伊春市| 班玛县| 武陟县| 云南省| 滦南县| 孝昌县| 新沂市| 邵东县| 扶风县| 泽库县| 宝山区| 新和县| 营口市| 昆明市| 青铜峡市| 伊川县| 酒泉市| 灵石县| 双辽市| 天长市| 乌拉特后旗| 陆河县| 侯马市| 赤水市| 紫阳县|