一道題採用兩種設計模式 對比策略模式和模版方法

2022-02-07 10:18:46 字數 2461 閱讀 4319

摘要

《c++ primer》習題14.38和14.39分別採用策略模式、模版方法解決問題。

問題

《c++ primer 5th》習題 14.38 : 編寫乙個類令其檢查某個給定的 string 物件的長度是否與乙個閥值相等。使用該物件編寫程式,統計並報告輸入的檔案中長度為 1 的單詞有多少個、長度為 2 的單詞有多少個、......、長度為 10 的單詞有多少個。

解法一 模版方法 template method

uml 類圖如下:

solution **如下:

template struct

solution

virtual ~solution() {}

virtual

void

operator() (const t& e) = 0

; unsigned

intval;

int times = 0

;};

equalsolution **如下:

template struct equalsolution : public solution

};

greatersolution **如下:

template struct greatersolution : public solution

};

lessersolution **如下:

template struct lessersolution : public solution

};

客戶端呼叫**如下:

int

main()

; solution

* es = new equalsolution(1

); solution

* ls = new lessersolution(5

); solution

* gs = new greatersolution(5

);

for (auto &e : v)

cout

<< "

長度等於 1 的有幾個:

"<< es->times <

cout

<< "

長度小於 5 的有幾個:

"<< ls->times <

cout

<< "

長度大於 5 的有幾個:

"<< gs->times <

return0;

}

解法二 策略方法 + 工廠方法uml類圖如下:

comparestrategy **如下:

struct

comparestrategy ;

};

equalstrategy **如下:

struct equalstrategy : public

comparestrategy

};

greaterstrategy **如下:

struct greaterstrategy : public

comparestrategy

};

lesserstrategy **如下:

struct lesserstrategy : public

comparestrategy

};

context **如下:

struct

context

context(

char type, int

v) : val(v) }};

客戶端呼叫**如下:

int

main() ;

context c1('e

', 3

); context c2('g

', 3

); context c3('l

', 3

);

for (auto &e : v)

cout

<< c1.times <

cout

<< c2.times <

cout

<< c3.times <

return0;

}

總結兩種模式下,耦合度都不高,但是採用策略模式更合乎人類的思維。

所以這道題,策略模式更適用。

兩種單例設計模式

設計模式是在大量的實踐中總結和理論化之後優選的 結構 程式設計風格 以及解決問題的思考方式。設計模式就像是經典的棋譜,不同的棋局,我們用不同的棋譜,免去我們自己再思考和摸索。所謂類的單例設計模式,就是採取一定的方法保證在整個的軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項...

關於設計模式的一道題目

乙個系統,提供多個http協議的介面,返回的結果y有json格式和jsonp格式。json的格式為,為了保證該協議變更之後更好的應用到多個介面,為了保證修改協議不影響到原先邏輯的 以下哪些設計模式是需要的?協議的變更指的是日後可能返回xml格式,或者是根據需求統一對返回的訊息進行過濾。a.aadap...

設計模式的兩種分類依據

設計模式有兩種分類方法,即根據模式的目的來分和根據模式的作用的範圍來分。1.根據目的來分 根據模式是用來完成什麼工作來劃分,這種方式可分為建立型模式 結構型模式和行為型模式 3 種。建立型模式 用於描述 怎樣建立物件 它的主要特點是 將物件的建立與使用分離 gof 中提供了單例 原型 工廠方法 抽象...