首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 設計模式深度解析:建造者模式

     編輯:Java 相關知識

什麼是建造者模式?

建造者模式屬於創建型模式,定義為:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。當物件擁有大量可選參數、構建步驟固定但細節多變時,它是最佳選擇。

四大核心角色

建造者模式類圖

  1. 產品類:複雜對象本身,包含多個組成部分(如汽車的引擎、底盤、輪胎)。
  2. 抽象建造者:定義構建產品各部件的抽象方法,及返回產品的方法。
  3. 具體建造者:實現抽象建造者,具體組裝部件並返回成品。
  4. 導演類:調度建造者按順序構建產品,封裝構建邏輯,與具體產品解耦。

代碼實現:組裝汽車

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 p1 = director.getAProduct(); p1.showProduct();
        Product p2 = director.getBProduct(); p2.showProduct();
    }
}

優點

  • 封裝性好:構建細節封裝在導演類,業務邏輯穩定。
  • 擴展性強:新增產品只需新增建造者,不動既有代碼,符合開閉原則。

建造者模式 vs 工廠模式

兩者極似,差別在於導演類:

  • 工廠模式:工廠類完整封裝創建邏輯,直接返回成品。
  • 建造者模式:建造者只負責「造零件」,導演類負責「組裝規則」,適用於更複雜的對象構建。

口訣:產品建造「很複雜」用工廠,「更複雜」用建造者。

總結

建造者模式將「構建過程」與「具體表示」解耦,適用於參數多、構建步驟固定、需靈活組合的場景。配合導演類,實現「同一構建流程,不同產品輸出」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved