建造者模式的思路整理

定义需要创建的实体类

package builder;

/**
 * @Auther: 苏察哈尔丶灿
 * @Date: 2020/8/7 11:29
 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。
 */
public class Product {
    private String param1;
    private String param2;
    private String param3;
    private String param4;
    private String param5;

    public Product() {

    }

    public Product(String param1, String param2, String param3, String param4, String param5) {
        this.param1 = param1;
        this.param2 = param2;
        this.param3 = param3;
        this.param4 = param4;
        this.param5 = param5;
    }

    public String getParam1() {
        return param1;
    }

    public void setParam1(String param1) {
        this.param1 = param1;
    }

    public String getParam2() {
        return param2;
    }

    public void setParam2(String param2) {
        this.param2 = param2;
    }

    public String getParam3() {
        return param3;
    }

    public void setParam3(String param3) {
        this.param3 = param3;
    }

    public String getParam4() {
        return param4;
    }

    public void setParam4(String param4) {
        this.param4 = param4;
    }

    public String getParam5() {
        return param5;
    }

    public void setParam5(String param5) {
        this.param5 = param5;
    }

    @Override
    public String toString() {
        return "Product{" +
                "param1='" + param1 + '\'' +
                ", param2='" + param2 + '\'' +
                ", param3='" + param3 + '\'' +
                ", param4='" + param4 + '\'' +
                ", param5='" + param5 + '\'' +
                '}';
    }
}

定义所有构建者的接口

package builder;

/**
 * @Auther: 苏察哈尔丶灿
 * @Date: 2020/8/7 11:38
 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。
 */
public interface IProductBuilder {

    void builderParam1(String param1);
    void builderParam2(String param2);
    void builderParam3(String param3);
    void builderParam4(String param4);
    void builderParam5(String param5);
    Product build();
}

设置引导类去执行构建者

package builder;

/**
 * @Auther: 苏察哈尔丶灿
 * @Date: 2020/8/7 13:54
 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。
 */
public class Director {
    // 持有构建者
    private IProductBuilder builder;

    public Director(IProductBuilder builder) {
        this.builder = builder;
    }

    public Product makeProduct(String param1, String param2, String param3, String param4, String param5) {

        builder.builderParam1(param1);
        builder.builderParam2(param2);
        builder.builderParam3(param3);
        builder.builderParam4(param4);
        builder.builderParam5(param5);
        Product product = builder.build();

        return product;
    }
}

至此,空壳已经搭建完成
后续可以按照业务需求定义不同的构建者类,用引导类去完成类的实例化

默认构建者类:

package builder;

/**
 * @Auther: 苏察哈尔丶灿
 * @Date: 2020/8/7 13:50
 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。
 */
public class DefaultConcreteProductBuilder implements IProductBuilder {

    private String param1;
    private String param2;
    private String param3;
    private String param4;
    private String param5;

    @Override
    public void builderParam1(String param1) {
        this.param1 = param1;
    }

    @Override
    public void builderParam2(String param2) {
        this.param2 = param2;

    }

    @Override
    public void builderParam3(String param3) {
        this.param3 = param3;
    }

    @Override
    public void builderParam4(String param4) {
        this.param4 = param4;
    }

    @Override
    public void builderParam5(String param5) {
        this.param5 = param5;
    }

    @Override
    public Product build() {
        return new Product(this.param1, this.param2, this.param3, this.param4, this.param5);
    }
}

特殊构建者类:

package builder;

/**
 * @Auther: 苏察哈尔丶灿
 * @Date: 2020/8/7 13:50
 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。
 */
public class SpecialConcreteProductBuilder implements IProductBuilder {

    private String param1;
    private String param2;
    private String param3;
    private String param4;
    private String param5;

    @Override
    public void builderParam1(String param1) {
        this.param1 = "特殊建造者:" + param1;
    }

    @Override
    public void builderParam2(String param2) {
        this.param2 = "特殊建造者:" + param2;

    }

    @Override
    public void builderParam3(String param3) {
        this.param3 = "特殊建造者:" + param3;
    }

    @Override
    public void builderParam4(String param4) {
        this.param4 = "特殊建造者:" + param4;
    }

    @Override
    public void builderParam5(String param5) {
        this.param5 = "特殊建造者:" + param5;
    }

    @Override
    public Product build() {
        return new Product(this.param1, this.param2, this.param3, this.param4, this.param5);
    }
}

还可根据业务扩展更多类,测试用例如下:

package builder;

/**
 * @Auther: 苏察哈尔丶灿
 * @Date: 2020/8/7 11:32
 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。
 */
public class Test {
    public static void main(String[] args) {
        DefaultConcreteProductBuilder dcp = new DefaultConcreteProductBuilder();
        Director director = new Director(dcp);
        Product product = director.makeProduct("param1", "param2", "param3", "param4", "param5");

        System.out.println(product);

        System.out.println("=========特殊建造者建造对象===========");

        SpecialConcreteProductBuilder scp = new SpecialConcreteProductBuilder();
        Director director2 = new Director(scp);
        Product product2 = director2.makeProduct("param1", "param2", "param3", "param4", "param5");

        System.out.println(product2);
    }
}

执行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值