構(gòu)造者模式

1. 概念

構(gòu)造者模式是較為復(fù)雜的創(chuàng)建型模式,它將客戶端與包含多個(gè)組成部分的復(fù)雜對(duì)象的創(chuàng)建過(guò)程分離??蛻舳藷o(wú)需知道具體的構(gòu)造過(guò)程,只需要與構(gòu)造器打交道即可。構(gòu)建與表示分離。

2. 使用場(chǎng)景

當(dāng)構(gòu)造一個(gè)對(duì)象需要很多參數(shù)的時(shí)候,并且參數(shù)的個(gè)數(shù)或者類型不固定的時(shí)候。

3. 實(shí)例

abstract class Builder {
    protected Product product = new Product();

    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract void buildPartC();

    public Product getResult() {
        return product;
    }

}
public class ConcreateBuilder extends Builder {
    @Override
    public void buildPartA() {

    }

    @Override
    public void buildPartC() {

    }

    @Override
    public void buildPartB() {

    }
}
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }
    public void setBuilder(Builder builder) {
        this.builder = builder;
    }
    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}
public class Product {
    public String getPartA() {
        return partA;
    }

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public String getPartB() {
        return partB;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public String getPartC() {
        return partC;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    private String partA;
    private String partB;
    private String partC;

}
public class BuilderClient {
    public static void main(String[] args) {
        Builder builder = new ConcreateBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
    }
}

4. 總結(jié)

Builder:它為創(chuàng)建一個(gè)產(chǎn)品Product對(duì)象的各個(gè)部件指定抽象接口
ConcreateBuilder:它實(shí)現(xiàn)了Builder接口,實(shí)現(xiàn)各個(gè)部件的具體構(gòu)造和裝配方法
Product:它是被構(gòu)建的復(fù)雜對(duì)象,包含多個(gè)組成部件
Director:指揮者又稱為導(dǎo)演類,它負(fù)責(zé)安排復(fù)雜對(duì)象的建造次序,指揮者與抽象建造者之間存在關(guān)聯(lián)關(guān)系

不過(guò)在具體的使用中,可能客戶端直接調(diào)用了ConcreateBuilder中的實(shí)際方法,而省略了Director。

5. 模式特性

松散耦合:生成器模式可以用同一個(gè)構(gòu)建算法構(gòu)建出表現(xiàn)上完全不同的產(chǎn)品,實(shí)現(xiàn)產(chǎn)品構(gòu)建和產(chǎn)品表現(xiàn)上的分離。
可以很容易的改編產(chǎn)品的內(nèi)部表示,同時(shí)又不用客戶端再次適配
更好的復(fù)用性:生成器模式很好的實(shí)現(xiàn)構(gòu)建算法和具體產(chǎn)品實(shí)現(xiàn)的分離

會(huì)產(chǎn)生多余的Builder對(duì)象,消耗內(nèi)存
對(duì)象的構(gòu)建過(guò)程暴露

6. 在android中的實(shí)際運(yùn)用

AlertDialog

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容