当前位置: 移动技术网 > IT编程>开发语言>Java > Java设计模式之Builder建造者模式

Java设计模式之Builder建造者模式

2019年07月19日  | 移动技术网IT编程  | 我要评论

北京速递,曲啸,包青天之打龙袍

一、场景描述

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

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

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

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

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

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

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

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

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

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

}

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网