Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23種設計模式中的一種。Builder模式是一種對象創建型模式之一,用來隱藏復合對象的創建過程,它把復合對象的創建過程加以抽象,通過子類繼承和重載的方式,動態地創建具有復合屬性的對象。
Builder模式是一種對象創建型模式,它跟工廠模式(包括工廠方法模式與虛擬工廠模式)一樣,都用來創建類的對象。我們先闡述一下Builder模式的定義:
Builder模式用來創建復合對象,并把復合對象的創建過程加以抽象,通過子類繼承和重載的方式,動態地創建具有復合屬性的對象;另一方面,為了統一創建過程,又把對象創建的操作統一封裝在名為Director所提供的方法里。
復合對象的概念:
所謂復合對象,指有別于一般的對象,該對象具有不同的復合屬性。比如我們把一輛汽車看成一個復合對象,是因為該汽車由多個復雜的零部件組成,這些零部件可能 因為生產廠家的不同等等而不同,但這些不同的零部件最終都能被組裝為一輛汽車。這些不同的零部件我們可稱之為汽車的復合屬性,同樣可稱該汽車為一個復合對象。
建造者:
測試類:
Builder模式與工廠模式的區別與Builder模式的應用場景我們上面提到了,Builder模式和工廠模式一樣,都屬于對象創建型模式,都用來創建類的對象。但它們存在在本質的區別:
- 在工廠模式里,我們無需關心產品的各部分是如何被創建的;但在Builder模式里,會把產品的創建過程抽象為多個部分。也就是說,工廠模式被關注的是整個產品,而Builder模式被關注的是產品的組成部分的創建過程。
- 因為上述關注點的不一樣,工廠模式被創建的產品是一個單一產品;Builder模式創建的是一個復合產品。
簡單一點說,在具體的應用中,我們是選用工廠模式來創建對象呢還是選用Builder模式來創建對象,完全取決于我們的關注點。
比如同為創建一輛汽車,如果我們只需關注只是從工廠里造出的這一輛汽車本身(然后加以使用),我們就可以使用工廠模式來創建該汽車;但如果我們還應該關注該汽車的各部分是怎么造出來的(或者說,不同的工廠對產品的各部分的造法不一樣),我們就應該使用Builder模式。
Builder模式的應用場景
- 對象的創建:Builder模式是為對象的創建而設計的模式
- 創建的是一個復合對象:被創建的對象為一個具有復合屬性的復合對象
- 關注對象創建的各部分的創建過程:不同的工廠(這里指builder生成器)對產品屬性有不同的創建方法


Builder模式是一種對象創建型模式,它跟工廠模式(包括工廠方法模式與虛擬工廠模式)一樣,都用來創建類的對象。我們先闡述一下Builder模式的定義:
Builder模式用來創建復合對象,并把復合對象的創建過程加以抽象,通過子類繼承和重載的方式,動態地創建具有復合屬性的對象;另一方面,為了統一創建過程,又把對象創建的操作統一封裝在名為Director所提供的方法里。
復合對象的概念:
所謂復合對象,指有別于一般的對象,該對象具有不同的復合屬性。比如我們把一輛汽車看成一個復合對象,是因為該汽車由多個復雜的零部件組成,這些零部件可能 因為生產廠家的不同等等而不同,但這些不同的零部件最終都能被組裝為一輛汽車。這些不同的零部件我們可稱之為汽車的復合屬性,同樣可稱該汽車為一個復合對象。
public interface CarBuilder { public void makeHead(); public void makeLight(); public void makeWheel(); }
public class MiniCarBuilder implements CarBuilder { @Override public void makeHead() { System.out.println("制造車頭"); } @Override public void makeLight() { Ligth light=new Light(); System.out.println("制造車燈"); } @Override public void makeWheel() { System.out.println("制造車尾"); } } public class Lighe{}
建造者:
public class CarDirector { CarBuilder builder; public CarDirector(CarBuilder builder) { this.builder = builder; } void builder() { builder.makeHead(); builder.makeLight(); builder.makeWheel(); } }
測試類:
public class Test { public static void main(String[] args) { new CarDirector(new MiniCarBuilder()).builder(); } }
Builder模式與工廠模式的區別與Builder模式的應用場景我們上面提到了,Builder模式和工廠模式一樣,都屬于對象創建型模式,都用來創建類的對象。但它們存在在本質的區別:
- 在工廠模式里,我們無需關心產品的各部分是如何被創建的;但在Builder模式里,會把產品的創建過程抽象為多個部分。也就是說,工廠模式被關注的是整個產品,而Builder模式被關注的是產品的組成部分的創建過程。
- 因為上述關注點的不一樣,工廠模式被創建的產品是一個單一產品;Builder模式創建的是一個復合產品。
簡單一點說,在具體的應用中,我們是選用工廠模式來創建對象呢還是選用Builder模式來創建對象,完全取決于我們的關注點。
比如同為創建一輛汽車,如果我們只需關注只是從工廠里造出的這一輛汽車本身(然后加以使用),我們就可以使用工廠模式來創建該汽車;但如果我們還應該關注該汽車的各部分是怎么造出來的(或者說,不同的工廠對產品的各部分的造法不一樣),我們就應該使用Builder模式。
Builder模式的應用場景
- 對象的創建:Builder模式是為對象的創建而設計的模式
- 創建的是一個復合對象:被創建的對象為一個具有復合屬性的復合對象
- 關注對象創建的各部分的創建過程:不同的工廠(這里指builder生成器)對產品屬性有不同的創建方法
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
