設計模式-建造者模式

定義

官方定義:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示,通俗的說就是:建造者模式就是如何一步步構建一個包含多個組成部件的對象,相同的構建過程可以創建不同的產品

特點

建造者模式是一種創建型模式,適用於那些流程固定,建造的目標對象會有所改變這種場景,還有一種場景是代替多參數構造器

作用

1、用戶不知道對象的建造過程和細節就可以創建出複雜的對象「屏蔽了建造的具體細節」
2、用戶只需給出複雜對象的內容和類型可以創建出對象

結構

Builder 接口或抽象類 抽象的建造者, 不是必須的
ConcreateBuilder 具體的構建者 可以有多個
Product 普通的類 被構建的對象
Director 指揮者 統一指揮構造者去建造目標

這裏寫圖片描述

組裝Android 手機爲例

1、要建造的對象 AndroidPhone

public class AndroidPhone {

private int emmcSize;
private String cup;

public void setCup(String cup) {
    this.cup = cup;
}

public void setEmmcSize(int emmcSize) {
    this.emmcSize = emmcSize;
}

}

2、抽象的建造者 Builder

public interface Builder {
void setCup(String cup);
void setEmmcSize(int size);
AndroidPhone createPhone() ;
}

3、具體建造者 AssemblerBuilder

public class AssembleBuilder implements Builder{

private AndroidPhone androidPhone = new AndroidPhone();

@Override
public void setCup(String cup) {
    androidPhone.setCup(cup);
}

@Override
public void setEmmcSize(int size) {
    androidPhone.setEmmcSize(size);
}

@Override
public AndroidPhone createPhone() {
    return androidPhone;
}

}

4、指揮者 Director

public class Director {

private Builder mBuilder;

public Director(Builder builder) {
    mBuilder = builder;
}

public AndroidPhone createPhone(String cup, int size) {
    mBuilder.setCup(cup);
    mBuilder.setEmmcSize(size);
    return mBuilder.createPhone();
}

}

5、測試類

public static void main(String[] args) {
Builder builder = new AssembleBuilder();

AndroidPhone androidPhone = new Director(builder).createPhone("mst618", 2048);

}

使用場景

1、如果一個對象有非常複雜的內部結構「這些產品通常有很多屬性」,那麼使用建造者模式
2、如果想把複雜對象的創建和使用分離開來,那麼使用建造者模式「使用相同的創建步驟可以創建不同的產品」

建造者模式與簡單工廠模式的差異

1、創建對象的粒度不同

工廠模式創建的是對象,而建造者模式創建的是一個複合產品,由各個複雜的部件組成。
2、關注點不同:
工廠模式注重只要把這個對象創建出來,而建造者模式不似要創造出這個產品,還有知道這個產品的組成部分

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