建造者模式_動力節(jié)點Java學院整理
定義:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。
類型:創(chuàng)建類模式
類圖:

四個要素
- 產(chǎn)品類:一般是一個較為復雜的對象,也就是說創(chuàng)建對象的過程比較復雜,一般會有比較多的代碼量。在本類圖中,產(chǎn)品類是一個具體的類,而非抽象類。實際編程中,產(chǎn)品類可以是由一個抽象類與它的不同實現(xiàn)組成,也可以是由多個抽象類與他們的實現(xiàn)組成。
- 抽象建造者:引入抽象建造者的目的,是為了將建造的具體過程交與它的子類來實現(xiàn)。這樣更容易擴展。一般至少會有兩個抽象方法,一個用來建造產(chǎn)品,一個是用來返回產(chǎn)品。
- 建造者:實現(xiàn)抽象類的所有未實現(xiàn)的方法,具體來說一般是兩項任務:組建產(chǎn)品;返回組建好的產(chǎn)品。
- 導演類:負責調(diào)用適當?shù)慕ㄔ煺邅斫M建產(chǎn)品,導演類一般不與產(chǎn)品類發(fā)生依賴關系,與導演類直接交互的是建造者類。一般來說,導演類被用來封裝程序中易變的部分。
代碼實現(xiàn)
class Product {
private String name;
private String type;
public void showProduct(){
System.out.println("名稱:"+name);
System.out.println("型號:"+type);
}
public void setName(String name) {
this.name = name;
}
public void setType(String type) {
this.type = type;
}
}
abstract class Builder {
public abstract void setPart(String arg1, String arg2);
public abstract Product getProduct();
}
class ConcreteBuilder extends Builder {
private Product product = new Product();
public Product getProduct() {
return product;
}
public void setPart(String arg1, String arg2) {
product.setName(arg1);
product.setType(arg2);
}
}
public class Director {
private Builder builder = new ConcreteBuilder();
public Product getAProduct(){
builder.setPart("寶馬汽車","X7");
return builder.getProduct();
}
public Product getBProduct(){
builder.setPart("奧迪汽車","Q5");
return builder.getProduct();
}
}
public class Client {
public static void main(String[] args){
Director director = new Director();
Product product1 = director.getAProduct();
product1.showProduct();
Product product2 = director.getBProduct();
product2.showProduct();
}
}
建造者模式的優(yōu)點
首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務邏輯封裝在導演類中對整體而言可以取得比較好的穩(wěn)定性。
其次,建造者模式很容易進行擴展。如果有新的需求,通過實現(xiàn)一個新的建造者類就可以完成,基本上不用修改之前已經(jīng)測試通過的代碼,因此也就不會對原有功能引入風險。
建造者模式與工廠模式的區(qū)別
我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個“導演類”的角色。在建造者模式的類圖中,假如把這個導演類看做是最終調(diào)用的客戶端,那么圖中剩余的部分就可以看作是一個簡單的工廠模式了。
與工廠模式相比,建造者模式一般用來創(chuàng)建更為復雜的對象,因為對象的創(chuàng)建過程更為復雜,因此將對象的創(chuàng)建過程獨立出來組成一個新的類——導演類。也就是說,工廠模式是將對象的全部創(chuàng)建過程封裝在工廠類中,由工廠類向客戶端提供最終的產(chǎn)品;而建造者模式中,建造者類一般只提供產(chǎn)品類中各個組件的建造,而將具體建造過程交付給導演類。由導演類負責將各個組件按照特定的規(guī)則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶端。
總結(jié)
建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產(chǎn)品的建造很復雜,那么請用工廠模式;如果產(chǎn)品的建造更復雜,那么請用建造者模式。
相關文章
Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例
Android是一種基于Linux,自由及開放源代碼的操作系統(tǒng),Android分為四個層,從高層到底層分別是應用程序?qū)?、應用程序框架層、系統(tǒng)運行庫層和Linux內(nèi)核層,Android有四大基本組件:Activity、Service服務、BroadcastReceiver廣播接收器、Content Provider內(nèi)容提供者2023-11-11
Android開發(fā)之文本內(nèi)容自動朗讀功能實現(xiàn)方法
這篇文章主要介紹了Android開發(fā)之文本內(nèi)容自動朗讀功能實現(xiàn)方法,結(jié)合實例形式分析了Android自動朗讀TTS功能的操作步驟、相關函數(shù)使用方法與注意事項,需要的朋友可以參考下2017-09-09
Android socket如何實現(xiàn)文件列表動態(tài)訪問
本文介紹Android socket實現(xiàn)文件列表動態(tài)訪問,訪問文件夾之后通過listview展示,并在點擊文件夾后進入文件夾,獲得其內(nèi)容,有此需求的朋友可以參考下2021-06-06

