大話設計模式6 模板方法模式(考試抄題)

2021-10-12 03:02:14 字數 3427 閱讀 2976

假如某考試只有選擇題,試卷題目相同,不同的題目每人選擇不同,請設計試卷類,包括三道題目,並給出甲乙兩人的答案。

如下為輸出,共兩道題兩個學生選擇各不相同

由於甲乙兩個人選擇題答案並不相同,可以設計兩個試卷類。試卷類只有三個成員函式即試題1、試題2、試題3的題目及所選答案

甲的試卷類如下:

#ifndef test*****a_h

#define test*****a_h

class

test*****a

;#endif

實現也很簡單

#include

"test*****a.h"

#include

using

namespace std;

void test*****a::

testquestion1()

void test*****a::

testquestion2()

void test*****a::

testquestion3()

而乙的**和甲相似

#ifndef test*****b_h

#define test*****b_h

class

test*****b

;#endif

#include

"test*****b.h"

#include

using

namespace std;

void test*****b::

testquestion1()

void test*****b::

testquestion2()

void test*****b::

testquestion3()

main函式只需要例項化兩個類,並呼叫三道題即可

#include

"test*****a.h"

#include

"test*****b.h"

intmain()

最終執行結果

分析普通實現不足:兩個試卷類**十分相似,除了答案不同,題目完全相同。

可以考慮將相同的試卷抽象到父類,而甲乙兩個人的選擇放到子類中去繼承他。

那麼抽象父類test*****如下

#ifndef test*****_h

#define test*****_h

class

test*****

;#endif

實現只是將相同的題目抄進來即可,注意學生的選擇answer()是虛基類,父類無法給出有效的實現,需要繼承的子類重寫。

#include

"test*****.h"

#include

using

namespace std;

void test*****::

testquestion1()

void test*****::

testquestion2()

void test*****::

testquestion3()

那麼繼承的兩個子類如下

test*****a.h

#ifndef test*****a_h

#define test*****a_h

#include

"test*****.h"

class

test*****a

:public test*****

;#endif

#include

"test*****a.h"

#include

using

namespace std;

void test*****a::

answer1()

void test*****a::

answer2()

void test*****a::

answer3()

#ifndef test*****b_h

#define test*****b_h

#include

"test*****.h"

class

test*****b

:public test*****

;#endif

#include

"test*****b.h"

#include

using

namespace std;

void test*****b::

answer1()

void test*****b::

answer2()

void test*****b::

answer3()

最後main函式如下,父類指標呼叫子類物件呼叫子類的函式實現了多型,就能根據例項化物件輸出對應學生的輸出。如果還需要增加學生,只需要增加子類並例項化該子類即可。

//#include"test*****.h"

#include

"test*****a.h"

#include

"test*****b.h"

intmain()

看完了**總結下模板方法模式:定義乙個操作中的演算法骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。在本例中將相同的試題當做骨架定義出來,每個人的選擇放到子類中,而更改每個人選擇或者新增其他試卷只需要修改子類即可。通俗點說就是當我們要完成某一細節層次一致的過程或者一系列步驟,但個別步驟或細節不同,可以用模板方法模式。

模板方法模式提供了乙個很好的**復用平台,可以將不變的行為放到父類,去除子類中的重複**,子類只實現不重複行為。

大話設計模式 模板方法模式

一 模式介紹 模板方法模式特別適合於整體流程 演算法 固定,只有一小部分功能不同的場景 通過乙個抽象父類構造起整個骨架,而將不固定的部分以抽象方法的形式保留,交給子類去具體實現 二 採用模板方法模式實現街邊小吃 烤冷麵 假設烤冷麵製作流程是固定的 1.加熱麵餅,2.加調料 我們先來實現乙個製作骨架 ...

《大話設計模式》模板方法模式

模板方法模式,定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。dp 模板方法模式提供了乙個很好的 復用平台,通過把不變行為搬移到超類,去除子類中的重複 來體現它的優勢。有時候,我們會遇到由一系列步驟構成的過程需要執行...

模板方法模式 大話設計模式

在今天,讀書有時是件 麻煩 事。它需要你付出時間,付出精力,還要付出乙份心境。僅以 大話設計模式 來祭奠那逝去的 模板方法模式 定義乙個操作中的演算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重新定義改演算法的某些特定步驟,例如現實生活中的簡歷模板 模板等等 模板...