资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Java如何实现Builder建造者模式

小编给大家分享一下Java如何实现Builder建造者模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目网站设计制作、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元五河做网站,已为上家服务,为五河各地企业和个人服务,联系电话:18980820575

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、网站建设、如皋网络推广、重庆小程序开发、如皋网络营销、如皋企业策划、如皋品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供如皋建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

一、场景描述

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

工厂模式:Java设计模式之工厂模式

抽象工厂模式:Java设计模式之抽象工厂模式

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

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

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

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

Java如何实现Builder建造者模式

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

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

扩展时,例如新增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());
  }

}

以上是“Java如何实现Builder建造者模式”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


分享标题:Java如何实现Builder建造者模式
当前链接:http://cdkjz.cn/article/jjiepj.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220