通俗易懂理解建造者模式

當(dāng)一個(gè)產(chǎn)品的構(gòu)建過(guò)程是固定且復(fù)雜多變的,則可以將該產(chǎn)品的構(gòu)建過(guò)程抽象出來(lái)。

從一個(gè)簡(jiǎn)單的例子出發(fā)

比如:組裝一臺(tái)電腦,你一定需要有CPU、主板、內(nèi)存、硬盤以及IO外設(shè)。而每個(gè)部分你都可以選擇不同的類型:CPU可以是Arm或者Intel,內(nèi)存可以是臺(tái)電的或是三星的等等。

這樣的話,如果將構(gòu)建電腦的過(guò)程抽象出來(lái),就可以如下表示:

public abstract class ComputerBuilder{
    public abstract void buildCPU();
    public abstract void buildMemory(); 
    public abstract void buildIO();
    public abstract Product getProduct();
}

而產(chǎn)品可以簡(jiǎn)單表示為:

public class Computer {
    String memory;
    String IO;
    String CPU;
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "memory:"+memory+"\n"+"IO:"+IO+"\n"+"CPU:"+CPU;
    }
}

這個(gè)時(shí)候如果Dell需要生產(chǎn)一臺(tái)電腦就會(huì)這樣做:

public class DellComputerBuilder extends ComputerBuilder{
    
    private Computer DellComputer = new Computer();
    
    @Override
    public void buildCPU() {
        // TODO Auto-generated method stub
        DellComputer.CPU = "dellCPU";
    }

    @Override
    public void buildMemory() {
        // TODO Auto-generated method stub
        DellComputer.IO = "dellIO";
    }

    @Override
    public void buildIO() {
        // TODO Auto-generated method stub
        DellComputer.memory = "dellMemory";
    }

    @Override
    public Computer getProduct() {
        // TODO Auto-generated method stub
        buildCPU();
        buildIO();
        buildMemory();
        return DellComputer;
    }
    
}

最后經(jīng)銷商director將負(fù)責(zé)把產(chǎn)品賣出:

public class Director {
    private ComputerBuilder computerBuilder;
    public Director(ComputerBuilder cb) {
        this.computerBuilder = cb;
    }
    public Computer getComputer() {
        return computerBuilder.getProduct();
    }
}

這四個(gè)類的關(guān)系大致如下:

image

與工廠模式(模板工廠、抽象工廠)的區(qū)別和聯(lián)系

我們可以看到整個(gè)建造者模式是一個(gè)特別強(qiáng)調(diào)產(chǎn)品構(gòu)建過(guò)程的設(shè)計(jì)模式,而工廠模式則更加強(qiáng)調(diào)了產(chǎn)品的種類

事實(shí)上,上面的例子我特地給出了DellComputer,這說(shuō)明Computer完全可以作為一個(gè)抽象產(chǎn)品類出現(xiàn),從而滿足不同類型的builder。這些builder完全可以是聯(lián)想、華碩等等。

而在經(jīng)銷商看來(lái),只要你的產(chǎn)品沒(méi)有缺失(都含有CPU、Memory、IO),那么經(jīng)銷商就完全不必去關(guān)心電腦怎么組裝的,也不用關(guān)心是哪個(gè)廠家生產(chǎn)的。經(jīng)銷商只需要告訴客戶一件事,那就是我賣的是Computer。而客戶需要哪種Computer,只需要告訴經(jīng)銷商即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容