建造者模式(Builder Pattern)

建造者模式使用多个简单对象一步一步构建成一个复杂对象,属于创建型模式。

【需求】:对象创建有多种组合。又要封装创建逻辑(类似于工厂模式,调一个方法给指定实例)

如AK47可以装配消音器和多倍镜(可装可不装),消音器有高低级,多倍镜有高低倍。
生成实例如下:
带高级消音器的AK47 | 带高级消音器 8倍镜的AK47 | 带低级消音器 2倍镜的AK47 | AK47

【关键代码】:建造者(abstract builder与builder)负责创建和提供实例,指导者(Director)负责管理建造出来实例的依赖关系。

【例】:

//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)负责组装。

以上为个人理解,理解错误之处请帮忙指正,多谢!


roylion
204 声望25 粉丝

读书破万卷