软件设计模式——建造者模式

一、模式1

1.1、介绍

1.2、建造者模式的意图和适用场景

 

1.3、角色分析

1.4、代码实现

Product

package oopdemo01.Design_pattern.builder.demo01;

// 产品:房子
public class Product {
    private String buildA;
    private String buildB;
    private String buildC;
    private String buildD;

    public String getBuildA() {
        return buildA;
    }

    public void setBuildA(String buildA) {
        this.buildA = buildA;
    }

    public String getBuildB() {
        return buildB;
    }

    public void setBuildB(String buildB) {
        this.buildB = buildB;
    }

    public String getBuildC() {
        return buildC;
    }

    public void setBuildC(String buildC) {
        this.buildC = buildC;
    }

    public String getBuildD() {
        return buildD;
    }

    public void setBuildD(String buildD) {
        this.buildD = buildD;
    }

    @Override
    public String toString() {
        return "Product{" +
                "buildA='" + buildA + '\'' +
                ", buildB='" + buildB + '\'' +
                ", buildC='" + buildC + '\'' +
                ", buildD='" + buildD + '\'' +
                '}';
    }
}

Builder

package oopdemo01.Design_pattern.builder.demo01;

// 抽象的建造者:方法
public abstract class Builder {
    abstract void buildA(); // 步骤1,地基

    abstract void buildB(); // 步骤2,钢筋工程

    abstract void buildC(); // 步骤3,铺电线

    abstract void buildD(); // 步骤4,粉刷

    // 完工:得到产品
    abstract Product getProduct();
}

Worker

package oopdemo01.Design_pattern.builder.demo01;

// 具体的建造者:工人
public class Worker extends Builder{

    private Product product;

    public Worker() {
        product = new Product();
    }

    @Override
    void buildA() {
        product.setBuildA("地基");
        System.out.println("地基");
    }

    @Override
    void buildB() {
        product.setBuildB("钢筋工程");
        System.out.println("钢筋工程");
    }

    @Override
    void buildC() {
        product.setBuildC("铺电线");
        System.out.println("铺电线");
    }

    @Override
    void buildD() {
        product.setBuildD("粉刷");
        System.out.println("粉刷");
    }

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

Director

package oopdemo01.Design_pattern.builder.demo01;

// 指挥:核心。负责指挥构建一个工厂,工厂如何构建,由他决定。
public class Director {

    // 指挥工人按照顺序建房子
    public Product build(Builder builder) {
        builder.buildA();
        builder.buildB();
        builder.buildC();
        builder.buildD();

        return builder.getProduct();
    }
}

Test

package oopdemo01.Design_pattern.builder.demo01;

public class Test {
    public static void main(String[] args) {
        // 指挥
        Director director = new Director();
        // 指挥 具体的工人完成产品
        Product build = director.build(new Worker());
        System.out.println(build.toString());
    }
}

二、模式2

2.1、介绍

2.2、代码实现

Product

package oopdemo01.Design_pattern.builder.demo02;

// 产品:套餐
public class Product {

    // 默认套餐
    private String BuildA = "汉堡";
    private String BuildB = "可乐";
    private String BuildC = "薯条";
    private String BuildD = "甜点";

    public String getBuildA() {
        return BuildA;
    }

    public void setBuildA(String buildA) {
        BuildA = buildA;
    }

    public String getBuildB() {
        return BuildB;
    }

    public void setBuildB(String buildB) {
        BuildB = buildB;
    }

    public String getBuildC() {
        return BuildC;
    }

    public void setBuildC(String buildC) {
        BuildC = buildC;
    }

    public String getBuildD() {
        return BuildD;
    }

    public void setBuildD(String buildD) {
        BuildD = buildD;
    }

    @Override
    public String toString() {
        return "Product{" +
                "BuildA='" + BuildA + '\'' +
                ", BuildB='" + BuildB + '\'' +
                ", BuildC='" + BuildC + '\'' +
                ", BuildD='" + BuildD + '\'' +
                '}';
    }
}

Builder

package oopdemo01.Design_pattern.builder.demo02;

// 建造者
public abstract class Builder {
    abstract Builder buildA(String msg);  // 汉堡

    abstract Builder buildB(String msg);  // 可乐

    abstract Builder buildC(String msg);  // 薯条

    abstract Builder buildD(String msg);  // 甜点

    abstract Product getProduct();
}

Worker

package oopdemo01.Design_pattern.builder.demo02;

// 具体的建造者
public class Worker extends Builder {

    private Product product;

    public Worker() {
        product = new Product();
    }

    @Override
    Builder buildA(String msg) {
        product.setBuildA(msg);
        return this;
    }

    @Override
    Builder buildB(String msg) {
        product.setBuildB(msg);
        return this;
    }

    @Override
    Builder buildC(String msg) {
        product.setBuildC(msg);
        return this;
    }

    @Override
    Builder buildD(String msg) {
        product.setBuildD(msg);
        return this;
    }

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

Test

package oopdemo01.Design_pattern.builder.demo02;

public class Test {
    public static void main(String[] args) {
        // 服务员
        Worker worker = new Worker();
        Product product = worker.getProduct();
        System.out.println(product.toString());
    }
}

Test2

package oopdemo01.Design_pattern.builder.demo02;

public class Test2 {
    public static void main(String[] args) {
        // 服务员
        Worker worker = new Worker();
        // 链式编程:在原来的基础上,可以自由组合,如何不组合,也有默认套餐
        Product product = worker.buildA("全家桶").buildB("雪碧")
                .getProduct();
        System.out.println(product.toString());
    }
}

三、优缺点

四、应用场景以及与抽象工厂模式对比

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王雀跃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值