设计模式 - 创建型 - 建造者模式学习

现象:
设计模式-创建型设计模式-建造者模式学习

实现:
将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。适合创建复杂的对象

方法:
一:创建产品对象。多个部分组成(组成部门也可以是其他对象)

/**
 * 产品角色:包含多个部件的对象
 */
public class Product {
    // 产品的A部分
    private String partA;

    // 产品的B部分
    private String partB;

    // 产品的C部分
    private 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;
    }

    //展示对象信息
    public void show(){
        System.out.println("信息展示:"+partA+"-"+partB+"-"+partC);
    }
}

二:抽象类 建造者

/**
 * 抽象类 建造者
 */
abstract class AbstractBuildProduct {
    // 产品对象
    Product product = new Product();

    //创建A部分抽象方法
    public abstract void buildPartA();
    //创建B部分抽象方法
    public abstract void buildPartB();
    //创建C部分抽象方法
    public abstract void buildPartC();

    public Product getProduct(){
        return product;
    };
}

三: 产品的具体创建者(工人) 继承抽象类

/**
 * 产品的具体创建者 继承抽象类
 */
public class BuildProduct extends AbstractBuildProduct{
    @Override
    public void buildPartA() {
        product.setPartA("创建产品A部分");
    }

    @Override
    public void buildPartB() {
        product.setPartB("创建产品B部分");
    }

    @Override
    public void buildPartC() {
        product.setPartC("创建产品C部分");
    }
}

四:产品创建的指挥者

/**
 *  产品创建的指挥者
 */
public class Commander {
    private BuildProduct buildProduct;

    //设置创建者
    public void setBuildProduct(BuildProduct buildProduct) {
        this.buildProduct = buildProduct;
    }

    //产品构建与组装方法
    public Product construct() {
        //分步创建产品
        buildProduct.buildPartA();
        buildProduct.buildPartB();
        buildProduct.buildPartC();
        return buildProduct.getProduct();
    }
}

五:创建指挥者指挥创建产品

//创建具体产品的创建者
BuildProduct buildProduct=new BuildProduct();

//创建指挥者
Commander commander=new Commander();
commander.setBuildProduct(buildProduct);

//指挥工人创建产品
Product product = commander.construct();

//展示产品
product.show();

结果:
信息展示:创建产品A部分-创建产品B部分-创建产品C部分

具体实例:
创建具体的计算机
计算机包括显示屏+主机+物流方式属性

一:创建显示屏、主机、计算机类

/**
 * 显示器
 */
@Data
public class Monitor {
    //大小
    private String size;
    //颜色
    private String colour;
    public Monitor(String size, String colour) {
        this.size=size;
        this.colour=colour;
    }
}

/**
 * 主机
 */
@Data
public class MasterHost {
    //cpu
    private String cpu;
    //内存
    private String memory;
    public MasterHost(String cpu, String memory) {
        this.cpu=cpu;
        this.memory=memory;
    }
}

//具体产品
@Data
public class Product {
    //显示器
    private Monitor monitor;
    //主机
    private MasterHost masterHost;
    //物流方式
    private String type;
    public void show(){
        System.out.println("产品展示:");
        System.out.println("显示器:"+monitor);
        System.out.println("主机:"+masterHost);
        System.out.println("物流方式:"+type);
    }
}

二:创建具体主机/显示器对象方法

/**
 * 创建具体主机/显示器对象
 */
public class Resources {
    public Monitor getMonitor(){
        return new Monitor("11","s");
    }

    public MasterHost getMasterHost(){
        return new MasterHost("cpu","14");
    }
}

三:抽象类建筑者

/**
 * 抽象类 建造者
 */
abstract class AbstractBuildProduct {
    // 产品对象
    Product product = new Product();
    //创建显示器抽象方法
    public abstract void buildPartA(Monitor monitor);
    //创建主机抽象方法
    public abstract void buildPartB(MasterHost masterHost);
    //创建物流抽象方法
    public abstract void buildPartC(String type);
    public Product getProduct(){
        return product;
    };
}

四:产品的具体创建者 继承抽象类

/**
 * 产品的具体创建者 继承抽象类
 */
public class BuildProduct extends AbstractBuildProduct{
    @Override
    public void buildPartA(Monitor monitor) {
        product.setMonitor(monitor);
    }
    @Override
    public void buildPartB(MasterHost masterHost) {
        product.setMasterHost(masterHost);
    }
    @Override
    public void buildPartC(String type) {
        product.setType(type);
    }
}

五:产品创建的指挥者


/**
 *  产品创建的指挥者
 */
public class Commander {
    private BuildProduct buildProduct;

    //设置创建者
    public void setBuildProduct(BuildProduct buildProduct) {
        this.buildProduct = buildProduct;
    }
    private Resources resources = new Resources();
    //产品构建与组装方法
    public Product construct(String type) {
        //分步创建产品(控制产品的生产循序+返回具体的产品)
        buildProduct.buildPartA(resources.getMonitor());
        buildProduct.buildPartB(resources.getMasterHost());
        buildProduct.buildPartC(type);
        return buildProduct.getProduct();
    }
}

六:调用测试

   //创建具体产品的创建者
    BuildProduct buildProduct=new BuildProduct();
    //创建指挥者
    Commander commander=new Commander();
    commander.setBuildProduct(buildProduct);

    //指挥工人创建产品(提供产品的要求)
    Product product = commander.construct("顺丰");

    //展示产品
    product.show();

结果:
产品展示:
显示器:Monitor(size=11, colour=s)
主机:MasterHost(cpu=cpu, memory=14)
物流方式:顺丰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值