A042Java設計模式-建造者模式

一、簡介

工廠類模式提供的是創建單個類的模式,而建造者模式則是將各種產品集中起來管理,用來創建複合對象,所謂複合對象就是指某個類具有不同的屬性;

 

二、四個角色說明

Product產品類:通常是實現了模板方法模式,也就是有模板方法和基本方法;

Builder抽象建造者:規範產品的組建,一般是由子類實現;

ConcreteBuilder具體建造者:實現抽象類定義的所有方法,並且返回一個組建好的對象;

Director導演類:負責安排已有模塊的順序,然後告訴Builder開始建造‘’

 

三、代碼演示

抽象建造者Builder:

package com.zibo.design_mode.builder;

//裝機人員裝機的抽象方法-相當於是一個約束,必須具備這些內容
public abstract class Builder {
    //裝CPU
    public abstract void buildCPU();
    //裝主板
    public abstract void buildMainBoard();
    //裝鍵盤
    public abstract void buildHD();
    //獲得組裝好的電腦
    public abstract Computer getComputer();
}

具體建造者ConcreteBuilder:

package com.zibo.design_mode.builder;

//裝機人員具體裝機的方法
public class ConcreteBuilder extends Builder {
    Computer computer = new Computer();

    @Override
    public void buildCPU() {
        computer.Add("裝CPU");
    }

    @Override
    public void buildMainBoard() {
        computer.Add("裝主板");
    }

    @Override
    public void buildHD() {
        computer.Add("裝硬盤");
    }

    @Override
    public Computer getComputer() {
        return computer;
    }
}

產品類Computer:

package com.zibo.design_mode.builder;

import java.util.ArrayList;
import java.util.List;

public class Computer {
    /**
     * 電腦組件集合
     */
    private List<String> parts = new ArrayList<>();

    public void Add(String part) {
        parts.add(part);
    }

    public void print() {
        for (String part : parts) {
            System.out.println("組件:" + part + "裝好了...");
        }
        System.out.println("電腦組裝完畢...");
    }
}

導演類Director:

package com.zibo.design_mode.builder;

/**
 * 裝機人員裝機
 */
public class Director {
    public void Construct(Builder builder) {
        builder.buildCPU();
        builder.buildMainBoard();
        builder.buildHD();
    }
}

測試類BuilderPattern:

package com.zibo.design_mode.builder;

public class BuilderPattern {
    public static void main(String[] args) {
        //裝機人員裝機對象
        Director director = new Director();
        //構造器
        Builder builder = new ConcreteBuilder();
        //裝機
        director.Construct(builder);
        //獲取裝好的電腦
        Computer computer = builder.getComputer();
        //打印相關信息
        computer.print();
    }
}

運行結果:

組件:裝CPU裝好了...
組件:裝主板裝好了...
組件:裝硬盤裝好了...
電腦組裝完畢...

 

四、建造者模式的應用

封裝性:使用建造者模式可以是客戶端不必知道產品內部組成的細節;
建造者獨立,容易擴展;
便於控制細節風險:由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊穿上任何影響;

 

五、建造者模式的使用場景

相同的方法,不同的執行順序,產生不同的事件結果時,可以採用建造者模式;
多個部件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時,則可以使用該模式;
產品類非常複雜,或者產品類中的調用順序不同產生了不同的效能,這個時候使用建造者模式非常合適;
在對象創建過程中會使用到系統中的一些其他對象,這些對象在產品對象的創建過程中不易得到時,也可以採用建造者模式封裝該對象的創建過程;

 

六、建造者模式的注意事項

建造者模式關注的是零件類型和裝配工藝(順序),這是它與工廠方法模式最大不同的地方,雖然同爲創建類模式,但是注重點不同。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章