設計模式的C語言應用 建造者模式 第七章

2021-09-25 06:49:38 字數 1259 閱讀 9749

建造者模式將複雜產品的構建過程封裝分解在不同的方法中,使得建立過程非常清晰。它隔離了複雜產品 物件的建立和使用,使得相同的建立過程能夠建立不同的產品。若幾個 產品之間存在較大的差異,則不適用建造者模式

物件導向裡的建造者模式,對於c語言,就無需這麼複雜了。

比如用c構建乙個網路資料報,需要構建dmac域,smac域,長度域,ip等各層頭。如果**寫在乙個函式裡,那麼會很長很複雜。可以把dmac域,smac域,長度域合併到二層頭的構建函式,ip的各個域寫到乙個函式。

struct packet

void original_func(struct packet *pkt)

下面的例子很簡單,但是實際上用建造者模式是因為各部分的建造函式可以復用,建造出某型別產品的不同的具體例項,同時有利於模組化,避免過長的函式。

void builder_parta(struct packet *pkt)

void builder_partb(struct packet *pkt)

void builder_partc(struct packet *pkt)

void builder_func(struct packet *pkt)

如果做某幾件事情的主要方法都差不多,僅有小部分的不同,那麼相同的部分可以提取出來成為父類,不同的部分可以做成不同的子類。這種思路叫做模板方法模式。

圖表 1建造者模式和模板方法模式對比

和建造者模式切分構建和流程方法類似,模板方法模式首先也要對方法進行切分。建造者模式切分的每個部分都是乙個沒有繼承關係的類,組合起來作為builder類。而模板方法模式的父類實現了相同部分的方法,而子類擴充套件實現不同的方法。模板方法模式的子類包含了整套的方法。

對於c語言,由於不存在繼承,所以建造者方法和模板方法模式就可以混用。每乙個part可以成為函式,組合起來成為builder函式,而替換不同的part,可以變成不同的builder。

對於c語言開發者來說,通常是在構造複雜的資料結構時候會想到建造者模式。比如核間通訊訊息,程序間通訊訊息。isp裡面的request訊息,就隱性用了建造者模式。

自行編寫偽資料報傳送**也非常適合用建造者模式。把資料報的不同層的頭部資訊用不同的函式進行構造。

C語言和設計模式(建造者模式)

cpp view plain copy typedef struct assemblepersonalcomputer assemblepersonalcomputer 對於乙個希望配置intel cpu,samsung 記憶體 日立硬碟的朋友。他可以這麼設計,cpp view plain copy...

C語言和設計模式(建造者模式)

typedef struct assemblepersonalcomputer assemblepersonalcomputer 對於乙個希望配置intel cpu,samsung 記憶體 日立硬碟的朋友。他可以這麼設計,void assemble intel cpu void assemble s...

C 設計模式 建造者模式

本文固定連線 using system using system.collections.generic using system.linq using system.text using system.threading.tasks public void show 抽象建造者類,確定產品有兩個部...