【Creational Pattern】建造者模式(Builder Pattern)

建造者模式(Builder Pattern)

建造者模式使用多個簡單對象一步一步構建成一個複雜對象,屬於建立型模式。ide

【需求】:對象建立有多種組合。又要封裝建立邏輯(相似於工廠模式,調一個方法給指定實例)ui

如AK47能夠裝配消音器和多倍鏡(可裝可不裝),消音器有高低級,多倍鏡有高低倍。
生成實例以下:
帶高級消音器的AK47 | 帶高級消音器 8倍鏡的AK47 | 帶低級消音器 2倍鏡的AK47 | AK47code

【關鍵代碼】:建造者(abstract builder與builder)負責建立和提供實例,指導者(Director)負責管理建造出來實例的依賴關係。對象

【例】:class

//AK 47, 可裝配消音器 多倍鏡
class AK47 {
    /** 消音 */
    String mute;
    /** 倍鏡 */
    String timesMirror;
    @Override
    /**輸出:  這是一把帶 [消音器] [多倍鏡] 的AK47 */
    public String toString() {
        return "這是一把帶"+(mute!=null?mute:"") + " " + (timesMirror!=null?timesMirror:"") +"的AK47";
    }
}

/** 建造者,負責生產消音器,多倍鏡以及AK47 */
abstract class AK47Builder {
    abstract String buildMute();
    abstract String buildMirrir();
    abstract AK47 buildAK47();
}

/** 建造者具體實現 */
class LowAK47Builder extends AK47Builder {
    @Override
    String buildMute() {
        return "低級消音器";
    }
    @Override
    String buildMirrir() {
        return "2倍鏡";
    }
    AK47 buildAK47() {
        return new AK47();
    }
}
class HignAK47Builder extends AK47Builder {
    @Override
    String buildMute() {
        return "高級消音器";
    }
    @Override
    String buildMirrir() {
        return "8倍鏡";
    }
    AK47 buildAK47() {
        return new AK47();
    }
}

/** 指導者*/
class AK47Director {
    
    /** 生產帶消音器和倍鏡的AK47 */
    public AK47 muteMirrorAK47(AK47Builder builder) {
        AK47 ak47 = builder.buildAK47();
        ak47.mute = builder.buildMute();
        ak47.timesMirror = builder.buildMirrir();
        return ak47;
    }
    /** 生產帶消音器的AK47 */
    public AK47 muteAK47(AK47Builder builder) {
        AK47 ak47 = builder.buildAK47();
        ak47.mute = builder.buildMute();
        return ak47;
    }
    /** 生產帶倍鏡的AK47 */
    public AK47 mirrorAK47(AK47Builder builder) {
        AK47 ak47 = builder.buildAK47();
        ak47.timesMirror = builder.buildMirrir();
        return ak47;
    }
    /** 生產AK47 */
    public AK47 AK47(AK47Builder builder) {
        return builder.buildAK47();
    }
}

public class BuilderPatternDemo {

    public static void main(String[] args) {
        /** 指導者 */
        AK47Director d = new AK47Director();
        
        /** 建造者 */
        LowAK47Builder low = new LowAK47Builder();
        HignAK47Builder hign = new HignAK47Builder();

        AK47 ak47 = d.muteMirrorAK47(hign); 
        System.out.println(ak47);// hign -> 高級消音器,8倍鏡AK  ; low ->低級消音器,2倍鏡AK
    }
}

以上例子中,AK47的組裝模式大體有四種,1 帶消音器和多倍鏡,2 帶消音器,3 帶多倍鏡,4 什麼都不帶。
而消音器又有高低級,多倍鏡有高低倍的區分,經過組合又會產生多種不一樣的實例。方法

總結,建造者模式 就是工廠模式的升級版,由工廠模式(Builder)生產組件,由指導者(Director)負責組裝。im

以上爲我的理解,理解錯誤之處請幫忙指正,多謝!總結

相關文章
相關標籤/搜索