java 設計模式:builder

概念:

建造者模式是較爲複雜的創建型模式,將組件和組件的組件過程分開,然後一步一步建造一個複雜的對象。所以建造者模式又叫生成器模式。它允許用戶在不知道內部構建細節的情況下,非常精細地控制對象構建流程。該模式是爲了將構建過程非常複雜的對象進行拆分,讓它與它的部件解耦,提升代碼的可讀性以及擴展性。

使用場景:

構造一個對象需要很多參數的時候,並且參數的個數或者類型不固定的時候

UML結構圖

例:

//創建複雜對象Product
public class Product {

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

    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;
    }
}

//創建抽象類Builder
public abstract class Builder {

    protected Product product = new Product();

    public abstract void builderPartA();
    public abstract void builderPartB();
    public abstract void builderPartC();

    public Product getResult() {
        return product;
    }
}

//創建實現類ConcreateBuilder
public class ConcreateBuilder extends Builder {
    @Override
    public void builderPartA() {

    }

    @Override
    public void builderPartB() {

    }

    @Override
    public void builderPartC() {

    }
}

//創建組裝對象Director
public class Director {

    private Builder builder;

    public Director(Builder builder){
        this.builder = builder;
    }

    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    public Product constract(){
        builder.builderPartA();
        builder.builderPartB();
        builder.builderPartC();
        return builder.getResult();
    }
}
//運行
        Builder builder = new ConcreateBuilder();
        Director director = new Director(builder);
        Product product = director.constract();
  • Builder:他爲創建一個創建Product對象的各個部件指定抽象接口
  • ConcreateBuilder:它實現了builder接口,實現各個部件的具體構造和裝配方法。
  • Product:他是被構建的複雜對象,包好多個組成部件。
  • Director:指揮者又稱爲導演類,負責安排複雜對象的建造次序,指揮者與抽象建造者之間存在關聯關係。

優點:

  • 鬆散耦合:生成其模式可以用同一個構造算法構建出表現上完全不同的產品,實現產品構建和產品表現上的分離。
  • 很容易改變產品內部表示。
  • 更好的複用性:生成器模式很好的實現了構建算法和具體產品實現的分離。

缺點:

  • 會產生多餘的Builder對象,Director對象,消耗內存。
  • 對象構建過程暴露。

builder模式在Android中的實際運用

1.AlertDialog

2.Glide/okhttp

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