设计模式-建造者模式

一、建造者模式与工程模式的区别

与工厂模式对比:工厂模式就是客户端向工厂要产品,可以是相同工厂属性不同的产品,也可以是不同工厂的产品,但是建造者就是告诉监工我要的产品该怎么组装,出发点不同,建造者关注的是产品建造过程的细接不同,而工厂模式则是关注要什么样的产品,不关注细接。举个例子:好比一个要买成品,一个要定制一款。

二、建造者模式概念

建造者模式主要分四个部分:产品、抽象构造者、具体建造者、指挥者,产品就是代表复杂的对象,是建造的最终产物,产品有个特性就是大的框架不会变,而内部的细节会变动;抽象构造者就是定义构造的规范,也就是大的框架,具体构造者就是抽象构造者的实现类,就是在大的框架下实现不同的细节;指挥者就是决定我要使用那个具体建造者来构建产品。

三、建造者代码实现

//具体的产品,代表负载的对象
public class Product {
    private String part1;
    private String part2;
    private String part3;
    public Product(String part1, String part2, String part3) {
        this.part1 = part1;
        this.part2 = part2;
        this.part3 = part3;
    }
    public String getPart1() {
        return part1;
    }
    public void setPart1(String part1) {
        this.part1 = part1;
    }
    public String getPart2() {
        return part2;
    }
    public void setPart2(String part2) {
        this.part2 = part2;
    }
    public String getPart3() {
        return part3;
    }
    public void setPart3(String part3) {
        this.part3 = part3;
    }
    @Override
    public String toString() {
        return "Product{" +
                "part1='" + part1 + '\'' +
                ", part2='" + part2 + '\'' +
                ", part3='" + part3 + '\'' +
                '}';
    }
}
//抽象建造者,定义大的框架
public interface Builder {
    public void buildPart1(String part1);
    public void buildPart2(String part1);
    public void buildPart3(String part1);
    public Product build();
}
//具体建造者,按照框架,实现具体细节构建
public class DefaultBuilder implements Builder {
    private String part1;
    private String part2;
    private String part3;
    @Override
    public void buildPart1(String part1) {
        this.part1=part1;
    }
    @Override
    public void buildPart2(String part2) {
        this.part2=part2;
    }
    @Override
    public void buildPart3(String part3) {
        this.part3=part3;
    }
    @Override
    public Product build() {
        return new Product(this.part1,this.part2,this.part3);
    }
}
//指挥者,决定那个建造者去建造产品
public class Director {
    public Builder builder;
    public Director(Builder builder) {
        this.builder=builder;
    }
    public Product construct(){
        builder.buildPart1("第1部分");
        builder.buildPart2("第2部分");
        builder.buildPart3("第3部分");
       return  builder.build();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        Builder builder=new SpecialBuilder();
        Director director=new Director(builder);
       Product product= director.construct();
        System.out.println(product);
    }
}

四、总结

建造者模式主要是将产品的构建与表示分离,同样的构建过程,但不同的表示,建造者模式类似与抽象工厂模式+最后的test,好比抽象工厂系列产品内部实现不同,但生产的产品不变,最后由test决定使用那一系列产品来表示;而建造者模式主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

 

posted @ 2020-07-21 21:37  狭路相逢智者胜  阅读(206)  评论(0)    收藏  举报