模板設計模式是一種非常簡單的設計模式,其主要是利用了虛函式的特性實現。非常適合應用在一些演算法、流程、業務邏輯是固定的形式,其中某些步驟的實現方式又無法確定下來的場景。
以下為模擬某晶元基於串列埠通訊的韌體公升級**,可以提供乙個 firmwareupgrade 的類用於使用者整合。考慮到跨平台,該類的串列埠操作介面宣告為純虛函式,由使用者自己根據所用平台實現,而不需要關注具體的公升級細節。
class firmwareupgrade
; virtual ~firmwareupgrade() {};
// 開始公升級
bool upgrade(const char *pfirmwarefile)
private:
bool sendcommand(int cmd, void *pdata, size_t size)
if(readserialport(package, sizeof(package)))
return package->done;
} bool init()
...return true;
} bool enterupgrademode()
bool erasepartition()
bool updatepartition(const char *pfirmwarefile)
} ...
fclose(fp);
return true;
} bool verifypartition()
bool resetdevice()
bool release()
};
如 windows 平台開發者,只需要利用 windows 平台下介面實現串列埠的開啟、寫入、讀取、關閉四個介面即可:
class firmwareupgradewin : public firmwareupgrade
...} virtual bool wrtieserialport(void *poutbuffer, size_t nlength)
return numberofbyteswrite;
} }virtual size_t readserialport(void *pinbuffer, size_t size)
return 0;
} virtual bool closeserialport() }
public
bool upgrade(const char *pfirmwarefile)
};int main()
如 linux 平台下的實現:
class firmwareupgradelinux : public firmwareupgrade
virtual bool wrtieserialport(void *poutbuffer, size_t nlength)
virtual size_t readserialport(void *pinbuffer, size_t size)
virtual bool closeserialport()
public:
bool upgrade(const char *pfirmwarefile)
};int main()
主要就是將差異化的抽離出來,延遲到子類實現,而固定的邏輯處理則由父類封裝並提供介面。相當於定義乙個模板,子類只要按照這個模板實現相應的介面,由父類反向呼叫子類所實現的介面,來完成具體的邏輯功能。這樣使用者不需要關心具體的公升級邏輯實現,只需要按照要求完成相應的介面,即可使用公升級功能,從而降低複雜性,又提公升了靈活性。 C C 設計模式 十二 模板模式
模板模式 template method模式 是行為模式之一,它把具有特定步驟演算法中的某些必要的處理委讓給抽象方法,通過子類繼承對抽象方法的不同實現改變整個演算法的行為。template method模式一般應用在具有以下條件的應用中 1.具有統一的操作步驟或操作過程 2.具有不同的操作細節 3....
設計模式學習筆記 模板 Template 模式
設計模式 設計模式,模板模式,template,模板方法 模板模式中的角色 模板模式可以很簡單的理解為,通過同乙個模具倒出來的模型。形狀上是一樣的,但是其上的花紋,紋理等卻可能完全不一樣。這裡的模板模式,特指template method模板方法模式。其原理為父類制定好規範 待實現的方法和模板方法。...
設計模式學習 模板模式
前面的時間學習了5種建立型設計模式和7種結構型設計模式,現在開始學習行為型的設計模式 在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。意圖 定義乙個操作...