builder创建java项目,Java设计模式之Builder建造者模式

一、场景描述

建造者模式同工厂模式、抽象工厂模式一样,用于创建继承类对象。

所不同的是,工厂模式下,各子类实现接口,通过工厂类创建子类对象;而建造者模式下,各子类拥有其建造者类,通过它创建不同的父类对象,最终实现多态,实际上子类、父类在代码中是不存在的。

以仪器数据采集工具为例,工厂模式下,定义接口“仪器数据采集工具”,定义子类“PDF文件数据采集工具”和“Excel文件数据采集工具”,子类实现接口。通过工厂类(无论是静态工厂类还是抽象工厂类),创建子类对象,这些对象拥有不同的表现方式,即为多态。

在建造者模式下,定义父类“仪器数据采集工具”,然后通过“PDF文件数据采集工具的建造者类”和“Excel文件数据采集工具的建造者类”来为“仪器数据采集工具”的类对象赋予不同的表现方式(为字段赋予不同的值等),最终实现多态。

建造者模式下,Director好比导演一般,它来调用建造者Builder完成对类对象的创建,调用者调用Director即可,如下图所示:

c1c78dce60ba1d301d74212df125899a.png

当然,工厂模式字面意义是用于创建对象,而建造者模式字面意义是建造不同的对象,两者能实现类似的功能,但两者的应用场景大可不同。

工厂模式应用于某简单类对象的创建,而建造者模式应用于复杂类对象的建造,具体可百度学习体会。

扩展时,例如新增Word文件数据采集,创建其Builder类即可,该类实现Word文件数据采集程序的创建工作;调用时使用WordBuilder类即可调用。

二、示例代码

(父)类:

package lims.designpatterndemo.builderdemo;

public class EquipmentDataCapture {

private String filePath;

private String equipmentData;

//

public String getFilePath(){

return this.filePath;

}

public void setFilePath(String filePath){

this.filePath = filePath;

}

public String getEquipmentData(){

return this.equipmentData;

}

public void setEquipmentData(String equipmentData){

this.equipmentData = equipmentData;

}

}

建造者接口:

package lims.designpatterndemo.builderdemo;

public interface EquipmentDataCaptureBuilder {

//部件

void buildFilePath();

void buildEquipmentData();

//组装

EquipmentDataCapture buildEquipmentDataCapture();

}

PDF数据采集建造者类:

package lims.designpatterndemo.builderdemo;

public class PdfFileCaptureBuilder implements EquipmentDataCaptureBuilder{

//

EquipmentDataCapture capture;

//构造

public PdfFileCaptureBuilder(){

capture = new EquipmentDataCapture();

}

//

@Override

public void buildFilePath() {

capture.setFilePath(".pdf");

}

@Override

public void buildEquipmentData() {

capture.setEquipmentData("pdf file content");

}

@Override

public EquipmentDataCapture buildEquipmentDataCapture() {

return capture;

}

}

Excel数据采集建造者:

package lims.designpatterndemo.builderdemo;

public class ExcelFileCaptureBuilder implements EquipmentDataCaptureBuilder{

//

EquipmentDataCapture capture;

//构造

public ExcelFileCaptureBuilder(){

capture = new EquipmentDataCapture();

}

@Override

public void buildFilePath() {

capture.setFilePath(".xlsx");

}

@Override

public void buildEquipmentData() {

capture.setEquipmentData("excel file content");

}

@Override

public EquipmentDataCapture buildEquipmentDataCapture() {

return capture;

}

}

Director类,可以简单理解为导演类:

package lims.designpatterndemo.builderdemo;

public class EquipmentDataCaptureDirector {

public EquipmentDataCapture constructEqiupmentDataCapture(EquipmentDataCaptureBuilder builder){

builder.buildFilePath();

builder.buildEquipmentData();

EquipmentDataCapture capture = builder.buildEquipmentDataCapture();

return capture;

}

}

调用端示例:

package lims.designpatterndemo.builderdemo;

public class BuilderDemo {

public static void main(String[] args) {

EquipmentDataCaptureDirector direcotr = new EquipmentDataCaptureDirector();

EquipmentDataCaptureBuilder builder = new PdfFileCaptureBuilder();

builder = new ExcelFileCaptureBuilder();

EquipmentDataCapture capture = direcotr.constructEqiupmentDataCapture(builder);

System.out.println(capture.getEquipmentData());

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值