1. 程式人生 > 實用技巧 >設計模式-建造者模式

設計模式-建造者模式

一、建造者模式與工程模式的區別

與工廠模式對比:工廠模式就是客戶端向工廠要產品,可以是相同工廠屬性不同的產品,也可以是不同工廠的產品,但是建造者就是告訴監工我要的產品該怎麼組裝,出發點不同,建造者關注的是產品建造過程的細接不同,而工廠模式則是關注要什麼樣的產品,不關注細接。舉個例子:好比一個要買成品,一個要定製一款。

二、建造者模式概念

建造者模式主要分四個部分:產品、抽象構造者、具體建造者、指揮者,產品就是代表複雜的物件,是建造的最終產物,產品有個特性就是大的框架不會變,而內部的細節會變動;抽象構造者就是定義構造的規範,也就是大的框架,具體構造者就是抽象構造者的實現類,就是在大的框架下實現不同的細節;指揮者就是決定我要使用那個具體建造者來構建產品。

三、建造者程式碼實現

//具體的產品,代表負載的物件
public class Product {
    private String part1;
    private String part2;
    private String part3;
    public Product(String part1, String part2, String part3) {
        this.part1 = part1;
        this.part2 = part2;
        this.part3 = part3;
    }
    public String getPart1() {
        
return part1; } public void setPart1(String part1) { this.part1 = part1; } public String getPart2() { return part2; } public void setPart2(String part2) { this.part2 = part2; } public String getPart3() { return part3; } public void
setPart3(String part3) { this.part3 = part3; } @Override public String toString() { return "Product{" + "part1='" + part1 + '\'' + ", part2='" + part2 + '\'' + ", part3='" + part3 + '\'' + '}'; } } //抽象建造者,定義大的框架 public interface Builder { public void buildPart1(String part1); public void buildPart2(String part1); public void buildPart3(String part1); public Product build(); } //具體建造者,按照框架,實現具體細節構建 public class DefaultBuilder implements Builder { private String part1; private String part2; private String part3; @Override public void buildPart1(String part1) { this.part1=part1; } @Override public void buildPart2(String part2) { this.part2=part2; } @Override public void buildPart3(String part3) { this.part3=part3; } @Override public Product build() { return new Product(this.part1,this.part2,this.part3); } } //指揮者,決定那個建造者去建造產品 public class Director { public Builder builder; public Director(Builder builder) { this.builder=builder; } public Product construct(){ builder.buildPart1("第1部分"); builder.buildPart2("第2部分"); builder.buildPart3("第3部分"); return builder.build(); } } //測試類 public class Test { public static void main(String[] args) { Builder builder=new SpecialBuilder(); Director director=new Director(builder); Product product= director.construct(); System.out.println(product); } }

四、總結

建造者模式主要是將產品的構建與表示分離,同樣的構建過程,但不同的表示,建造者模式類似與抽象工廠模式+最後的test,好比抽象工廠系列產品內部實現不同,但生產的產品不變,最後由test決定使用那一系列產品來表示。