c 設計模式 5 建造者模式

2022-09-20 01:00:11 字數 3283 閱讀 8870

建立型設計模式,就是專門用來建立物件;建立物件的事兒全權由你負責,我就不操心了,有點想領導的感覺,命令下去,活都是工人的,至於是哪個人去做那些事,才是領導的責任。建造者模式,例如乙個車間系統中,如果需要車間老闆想要一批車輛時,在這個實際需求中,車輛就是乙個複雜的物件,它是由車燈、車輛、機箱等組裝而成的,如果此時讓老闆一台一台車去組裝的話真是要累死老闆了,這裡就可以採用建造者模式來解決這個問題,我們可以把車輛的各個元件的組裝過程封裝到乙個建造者類物件裡,讓工人去造不同的車,建造者只要負責返還給客戶端全部元件都建造完畢的產品物件就可以了。至於老闆,只需要讓老闆命令那些工人去造那些車就行了。

部分內容選自感覺寫得很好,我只是自己總結成自己的東西。

在這個例子中,車間的老闆是指揮工人去把車的各個部件組裝起來,真真負責建立產品(這裡產品指的就是車)的人就是車間工人。理清了這個邏輯過程之後,下面就具體看下如何用**來表示這種現實生活中的邏輯過程:

1.首先得準備組成車的各個部件吧,也就是各個組成功能的類

/// /// 造車必備 工程師

///

public class engine

}/// /// 造車元件 燈光

///

public class light

}/// /// 造車元件 車輪

///

public class wheels

}/// /// 成品車----需要 工程師、燈光、車輪

///

public class car

public light light

public wheels wheels

public string name

public car(engine engine, light light, wheels wheels)

public car()

}

2.車元件都準備好了,那就讓工人幹咯,當然啦,造車流程大同小異,肯定要定義個抽象類來定義造車必要操作。

public class abstractbuilderinfo

public int age

}/// /// 工人抽象

///

public abstract class abstractbuilder :abstractbuidlerinfo

3.現在就要讓給個車間都準備好了,工人來操作吧,也就是真正的建造者。至於要造什麼車,不同工人來造了。

/// /// 比亞迪工人

///

public class builderbyd : abstractbuilder

;console.writeline(" build engine", this.gettype().name);

}public override void light()

;console.writeline(" build light", this.gettype().name);

}public override void wheels()

;console.writeline(" build wheels", this.gettype().name);

}public override car car()

", this._engine, this._light, this._wheels);

console.writeline(" build 比亞迪漢", this.gettype().name);

return new car(this._engine, this._light, this._wheels);}

}

/// /// 本田工人

///

public class builderbenz : abstractbuilder

;console.writeline(" build engine", this.gettype().name);

}public override void light()

;console.writeline(" build light", this.gettype().name);

}public override void wheels()

;console.writeline(" build wheels", this.gettype().name);

}public override car car()

", this._engine, this._light, this._wheels);

console.writeline(" build 本田", this.gettype().name);

return new car(this._engine, this._light, this._wheels);}

}

4. 現在由指揮者統一 來規範造車的步驟流程。

/// /// /造車子 執行者/管理者,建構函式傳遞乙個工人進來造車

///

public class director

/// /// 完全由管理者來控制 建造過程:建造順序

///

///

public car getcar()

}

5.主函式來實現

建造這模式:建造者+管理者 , 建造者: 負責內部結構的構造,管理者:指揮建造者來構造內部結構的執行過程;指揮者可以構造出不同型別的複雜物件;給我什麼型別的建造者我就建造出什麼型別的複雜物件;build 方法的都是建造者模式。

class program

}

介紹完了建造者模式的具體實現之後,讓我們總結下建造模式的實現要點:

在建造者模式中,指揮者是直接與客戶端打交道的,指揮者將客戶端建立產品的請求劃分為對各個部件的建造請求,再將這些請求委派到具體建造者角色,具體建造者角色是完成具體產品的構建工作的,卻不為客戶所知道。

建造者模式主要用於「分步驟來構建乙個複雜的物件」,其中「分步驟」是乙個固定的組合過程,而複雜物件的各個部分是經常變化的(也就是說電腦的內部元件是經常變化的,這裡指的的變化如硬碟的大小變了,cpu由單核變雙核等)。

產品不需要抽象類,由於建造模式的建立出來的最終產品可能差異很大,所以不大可能提煉出乙個抽象產品類。

在前面文章中介紹的抽象工廠模式解決了「系列產品」的需求變化,而建造者模式解決的是 「產品部分」 的需要變化。

由於建造者隱藏了具體產品的組裝過程,所以要改變乙個產品的內部表示,只需要再實現乙個具體的建造者就可以了,從而能很好地應對產品組成元件的需求變化。

設計模式 5 建造者模式

什麼是建造者模式?構造者模式 bulder pattern 將乙個複雜物件的構建與表示分離,使得同樣的構建可以建立不同的表示。為什麼使用建造者模式?複雜物件相當於一輛有待建造的汽車,而物件的屬性相當於汽車的部件,建造產品的過程就相當於組合部件的過程。由於組合部件的過程很複雜,因此,這些部件的組合過程...

設計模式5 建造者模式

建造者模式 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以創造不同的表示。使用場景 1 相同的方法,不同的執行順序,產生不同的事件結果,可以採用建造者模式 2 多個部件或零件,都可以裝配到乙個物件中,但是產生的執行結果又不相同時,可以使用該模式 3 產品類非常複雜,或者產品類中的呼叫順序...

設計模式 c 版(5) 建造者模式

定義 即生成器模式,將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。在建造者模式中,有如下4個角色 product 產品類 通常是實現了模板方法模式,也就是有模板方法和基本方法。例子中的 benzmodel 和 bmwmodel就屬於產品類。builder 抽象建造者 規範...