建造者模式將複雜產品的構建過程封裝分解在不同的方法中,使得建立過程非常清晰。它隔離了複雜產品 物件的建立和使用,使得相同的建立過程能夠建立不同的產品。若幾個 產品之間存在較大的差異,則不適用建造者模式
物件導向裡的建造者模式,對於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 抽象建造者類,確定產品有兩個部...