建造者模式(builder pattern),將乙個複雜物件的構建與它的表示分離,使的同樣的構建過程可以建立不同的表示。建造者模式的本質是使組裝過程(用指揮者類進行封裝,從而達到解耦的目的)和建立具體產品解耦,使我們不用去關心每個元件是如何組裝的。
在軟體系統中,有時需要建立乙個複雜物件,並且這個複雜物件由其各部分子物件通過一定的步驟組合而成。例如如果需要一輛車,在這個實際需求中,車就是乙個複雜的物件,它是由輪胎,發動機,車身等組裝而成的,如果讓我們買乙個個零件去組裝成乙個車的話就很不實際,肯定是車廠幹這事嘛對吧,於是這裡就可以採用建造者模式來解決這個問題,我們可以把電腦的各個元件的組裝過程封裝到乙個車廠的建造者類物件裡,建造者只要負責返還給客戶端全部元件都建造完畢的產品物件就可以了。
那我們首先新建乙個車的類。
public class car
public string engine
public string body
}
然後建立乙個建造者類,雖然有各種不同的車廠:奧迪、賓士等,甚至有不同的車型:卡車、suv等,雖然造出來的樣子可能不是一樣的,但是他們的操作都是一樣的,造輪胎,發動機等等,這些都是不同的建造者類,因此我定義為抽象類,用介面也可以。
public abstract class mybuilder
}public class suvbuilder : mybuilder
public override void buildbody()
public override void buildengine()
public override void buildwheel()
}
接下來,就是介紹建造者模式的精髓,那就是director。這個director呢,就是來執行我們剛才的造車動作的。
public class director
}
這個director類呢,重點在於createcarbybuilder的引數是我們的造車標準的介面。這樣一來,只要是實現了我們的這個介面的類,就都可以作為引數,我們剛剛不是造了乙個suv嗎?那我們如果想造乙個卡車,這個director也可以啟動這個造車過程,只要我們把這個卡車的類先寫好。
director director = new director();
car car = director.createcarbybuilder(new suvbuilder());
console.writeline(car.body);
console.writeline(car.engine);
console.writeline(car.wheel);
輸出結果:
suv
發動機四個輪
建造者模式的優點:
建造者模式的缺點:
3 建造者模式 設計模式筆記
分類 1 建立型模式 單例模式,工廠模式,抽象工廠模式,建造者模式,原型模式 2 結構型模式 介面卡模式,橋接模式,裝飾模式,組合模式,外觀模式,享元模式,模式 3 行為型模式 模板方法模式,命令模式,迭代器模式,觀察者模式,中介者模式,備忘錄模式,直譯器模式,狀態模式,策略模式,職責鏈模式,訪問者...
設計模式 建造者模式
在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...
設計模式建造者模式
今天看了乙個設計模式。總結下,以免忘了。如何引入建造者模式的呢?作者舉了個例子。建造小人。當然需要 頭,左手,右手,左腳,右腳,軀幹。建造的過程使用 使用類裡面的方法就行了。但是如果需要乙個胖的小人,乙個瘦的小人呢?就需要重新構造乙個胖人類,乙個瘦人類。當然 使用者還需要自己處理構造的過程。這樣 就...