建造者模式是一種創建型設計模式,主要用於解決複雜對象的構建問題。它將一個複雜對象的構建與其表示分離,使得同樣的構建過程可以創建不同的表示。這篇文章將通過一個建造房子的實例,深入淺出地講解建造者模式的核心概念與實現方式。
設計模式的靈感來源於建築學,這並非巧合。在軟件開發中,當我們需要創建一個包含多個組成部分的複雜對象時,如果直接在客戶端代碼中實例化並組裝所有部件,不僅代碼冗長難維護,還會導致高耦合。建造者模式通過引入「指揮者」和「建造者」角色,優雅地解決了這個問題。
即最終要構建的複雜對象。在例子中是 House 類,代表客戶想要的房子。
定義構建產品各個部件的抽象接口。對應例子中的 BuildTeam 接口,規定了施工隊必須具備的能力:打地基、架骨架、上水泥等,以及最終交付房子的方法 deliverHouse()。
實現抽象建造者接口,完成具體部件的構建。例子中的 BuildTeamA 和 BuildTeamB 就是兩個不同的施工隊,它們實現相同的接口但具體施工工藝可能不同。
負責安排構建順序,指揮建造者按步驟構建產品。例子中的 Designer 類,它持有建造者引用,在 construct() 方法中按順序調用建造者的各個構建方法。
客戶端代碼非常簡潔:
Designer designer = new Designer(); // 找設計師 BuildTeam teamA = new BuildTeamA(); // 找施工隊A designer.construct(teamA); // 設計師指揮施工 House house = teamA.deliverHouse(); // 驗收房子
當施工隊A漫天要價時,客戶只需更換施工隊:
BuildTeam teamB = new BuildTeamB(); designer.construct(teamB); // 同一設計師,新施工隊 House house = teamB.deliverHouse();
當一個對象包含多個組成部分,且構建過程複雜、步驟固定但具體實現可能變化時,建造者模式是最佳選擇。典型場景包括:文檔生成器、複雜配置對象創建、UI 界面構建等。