建造者模式

目录

1.核心本质

2.建造者的组成部分

3.代码示例

3.1 指挥者控制

3.1.1 建造者(使用接口创建)

3.1.2 具体建造者

3.1.3 产品

3.1.4 指挥者

3.1.5 测试

3.2 具体建造者控制

3.2.1 建造者(使用抽象类创建)

3.2.2 具体建造者

3.2.3 产品

3.2.4 测试


1.核心本质

提供创建对象的最佳方式,工厂类似于创造出零件,建造者负责把零件拼装起来

适用于:有复杂的对象属性,但是对象的属性具有共同性。

2.建造者的组成部分

Builder(构建者): 定义创建对象各部分的接口。通常包括构建对象的各个步骤的方法。

ConcreteBuilder(具体构建者): 实现 Builder 接口,实现各个构建步骤的具体逻辑,并且能够返回构建好的对象。

Director(指挥者): 负责使用 Builder 接口的对象来构建对象。Director 决定构建的步骤顺序,以及在何时使用 Builder 来构建对象。

Product(产品): 要创建的复杂对象。Builder 构建对象的各个部分,最终返回一个完整的产品。

3.代码示例

3.1 指挥者控制

由指挥者控制建造,适合固定属性。

3.1.1 建造者(使用接口创建)

public interface Builder {
    void buildPartA();

    void buildPartB();

    void buildPartC();

    Product getResult();// 获取产品对象
}

3.1.2 具体建造者

public class ConcreteBuilder implements Builder {
    private Product product;

    public  ConcreteBuilder(){
        product=new Product();
    }
    @Override
    public void buildPartA() {
        product.setPartA("拼装主机");
        System.out.println("拼装主机");
    }

    @Override
    public void buildPartB() {
        product.setPartB("连接屏幕");
        System.out.println("连接屏幕");
    }

    @Override
    public void buildPartC() {
        product.setPartC("连接键鼠");
        System.out.println("连接键鼠");
    }

    @Override
    public Product getResult() {
        System.out.println(product.toString());
        return product;
    }
}

3.1.3 产品

public class Product {
    //建造者模式
    //产品类
    //产品类包含多个部件,并且提供设置和获取部件的接口
    String partA;
    String partB;
    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;
    }

    @Override
    public String toString() {
        return "Product{" +
                "partA='" + partA + '\'' +
                ", partB='" + partB + '\'' +
                ", partC='" + partC + '\'' +
                '}';
    }
}

3.1.4 指挥者

public class Director {
    public void getProduct(Builder builder){
        builder.buildPartA();
        builder.buildPartC();
        builder.buildPartB();
        builder.getResult();
    }
}

3.1.5 测试

public class Test {
    public static void main(String[] args) {
        Director director = new Director();
        director.getProduct(new ConcreteBuilder());
    }
}

3.2 具体建造者控制

可以灵活赋值

3.2.1 建造者(使用抽象类创建)

abstract class Builder {
    abstract Builder buildPartA(String food);

    abstract Builder buildPartB(String food);

    abstract Builder buildPartC(String food);

    abstract Product getResult();// 获取产品对象
}

3.2.2 具体建造者

public class ConcreteBuilder extends Builder{
    private Product product;

    public ConcreteBuilder(){
        product=new Product();
    }
    @Override
    Builder buildPartA(String food) {
        product.setPartA(food);
        return  this;
    }

    @Override
    Builder buildPartB(String food) {
        product.setPartB(food);
        return  this;
    }

    @Override
    Builder buildPartC(String food) {
        product.setPartC(food);
        return  this;
    }

    @Override
    Product getResult() {
        return product;
    }
}

3.2.3 产品

public class Product {
    //建造者模式
    //产品类
    //产品类包含多个部件,并且提供设置和获取部件的接口
    String partA = "擀面皮";
    String partB = "肉夹馍";
    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;
    }

    @Override
    public String toString() {
        return "Product{" +
                "partA='" + partA + '\'' +
                ", partB='" + partB + '\'' +
                ", partC='" + partC + '\'' +
                '}';
    }
}

3.2.4 测试

public class Test {
    public static void main(String[] args) {
        ConcreteBuilder concreteBuilder = new ConcreteBuilder();
//        Product result = concreteBuilder.getResult();
        Product result = concreteBuilder.buildPartA("羊肉泡馍").buildPartC("辣子蒜羊血").getResult();
        System.out.println(result.toString());
    }
}

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值