最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式之Builder建造者模式

 更新時(shí)間:2018年03月24日 14:12:53   作者:馬洪彪  
這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之Builder建造者模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、場景描述

建造者模式同工廠模式、抽象工廠模式一樣,用于創(chuàng)建繼承類對(duì)象。

工廠模式:Java設(shè)計(jì)模式之工廠模式

抽象工廠模式:Java設(shè)計(jì)模式之抽象工廠模式

所不同的是,工廠模式下,各子類實(shí)現(xiàn)接口,通過工廠類創(chuàng)建子類對(duì)象;而建造者模式下,各子類擁有其建造者類,通過它創(chuàng)建不同的父類對(duì)象,最終實(shí)現(xiàn)多態(tài),實(shí)際上子類、父類在代碼中是不存在的。

以儀器數(shù)據(jù)采集工具為例,工廠模式下,定義接口“儀器數(shù)據(jù)采集工具”,定義子類“PDF文件數(shù)據(jù)采集工具”和“Excel文件數(shù)據(jù)采集工具”,子類實(shí)現(xiàn)接口。通過工廠類(無論是靜態(tài)工廠類還是抽象工廠類),創(chuàng)建子類對(duì)象,這些對(duì)象擁有不同的表現(xiàn)方式,即為多態(tài)。

在建造者模式下,定義父類“儀器數(shù)據(jù)采集工具”,然后通過“PDF文件數(shù)據(jù)采集工具的建造者類”和“Excel文件數(shù)據(jù)采集工具的建造者類”來為“儀器數(shù)據(jù)采集工具”的類對(duì)象賦予不同的表現(xiàn)方式(為字段賦予不同的值等),最終實(shí)現(xiàn)多態(tài)。

建造者模式下,Director好比導(dǎo)演一般,它來調(diào)用建造者Builder完成對(duì)類對(duì)象的創(chuàng)建,調(diào)用者調(diào)用Director即可,如下圖所示:

當(dāng)然,工廠模式字面意義是用于創(chuàng)建對(duì)象,而建造者模式字面意義是建造不同的對(duì)象,兩者能實(shí)現(xiàn)類似的功能,但兩者的應(yīng)用場景大可不同。

工廠模式應(yīng)用于某簡單類對(duì)象的創(chuàng)建,而建造者模式應(yīng)用于復(fù)雜類對(duì)象的建造,具體可百度學(xué)習(xí)體會(huì)。

擴(kuò)展時(shí),例如新增Word文件數(shù)據(jù)采集,創(chuàng)建其Builder類即可,該類實(shí)現(xiàn)Word文件數(shù)據(jù)采集程序的創(chuàng)建工作;調(diào)用時(shí)使用WordBuilder類即可調(diào)用。

二、示例代碼

(父)類:

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數(shù)據(jù)采集建造者類:

package lims.designpatterndemo.builderdemo;

public class PdfFileCaptureBuilder implements EquipmentDataCaptureBuilder{
  //
  EquipmentDataCapture capture;
  //構(gòu)造
  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數(shù)據(jù)采集建造者:

package lims.designpatterndemo.builderdemo;

public class ExcelFileCaptureBuilder implements EquipmentDataCaptureBuilder{

  //
  EquipmentDataCapture capture;
  //構(gòu)造
  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類,可以簡單理解為導(dǎo)演類:

package lims.designpatterndemo.builderdemo;

public class EquipmentDataCaptureDirector {
  public EquipmentDataCapture constructEqiupmentDataCapture(EquipmentDataCaptureBuilder builder){
    builder.buildFilePath();
    builder.buildEquipmentData();
    EquipmentDataCapture capture = builder.buildEquipmentDataCapture();
    return capture;
  }
}

調(diào)用端示例:

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());
  }

}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JFreeChart實(shí)現(xiàn)實(shí)時(shí)曲線圖

    JFreeChart實(shí)現(xiàn)實(shí)時(shí)曲線圖

    這篇文章主要為大家詳細(xì)介紹了JFreeChart實(shí)現(xiàn)實(shí)時(shí)曲線圖的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • java語言實(shí)現(xiàn)猜數(shù)字游戲

    java語言實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了java語言實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 淺談Java中對(duì)類的主動(dòng)引用和被動(dòng)引用

    淺談Java中對(duì)類的主動(dòng)引用和被動(dòng)引用

    這篇文章主要介紹了淺談Java中對(duì)類的主動(dòng)引用和被動(dòng)引用,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • springboot中thymeleaf模板使用詳解

    springboot中thymeleaf模板使用詳解

    這篇文章將更加全面詳細(xì)的介紹thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4.0中推薦使用thymeleaf來做前端模版引擎。
    2017-05-05
  • SpringMVC自定義日期轉(zhuǎn)換器方式

    SpringMVC自定義日期轉(zhuǎn)換器方式

    這篇文章主要介紹了SpringMVC如何自定義日期轉(zhuǎn)換器問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • springMVC自定義注解,用AOP來實(shí)現(xiàn)日志記錄的方法

    springMVC自定義注解,用AOP來實(shí)現(xiàn)日志記錄的方法

    下面小編就為大家分享一篇springMVC自定義注解,用AOP來實(shí)現(xiàn)日志記錄的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Java 的可變參數(shù)方法詳述

    Java 的可變參數(shù)方法詳述

    這篇文章主要介紹了Java 的可變參數(shù)方法,可變參數(shù)只能作為函數(shù)的最后一個(gè)參數(shù),在其前面可以有也可以沒有任何其他參數(shù),由于可變參數(shù)必須是最后一個(gè)參數(shù),所以一個(gè)函數(shù)最多只能有一個(gè)可變參數(shù),下面我們一起進(jìn)入文章了解更多關(guān)于可變參數(shù)的內(nèi)容吧
    2022-02-02
  • java在cmd中亂碼的問題解決

    java在cmd中亂碼的問題解決

    本文深入探討了在使用Java命令行cmd時(shí)可能出現(xiàn)的中文亂碼問題,并提供了兩種解決方案,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • JAVA中Collections工具類sort()排序方法

    JAVA中Collections工具類sort()排序方法

    這篇文章主要介紹了JAVA中Collections工具類sort()排序方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-11-11
  • Mybatis常用標(biāo)簽整理

    Mybatis常用標(biāo)簽整理

    日常開發(fā)中,MyBatis中標(biāo)簽有著舉足輕重的重要性,以下是一些MyBatis框架中常見的標(biāo)簽及案例,感興趣的朋友跟隨小編一起看看吧
    2007-02-02

最新評(píng)論

湄潭县| 唐海县| 千阳县| 平乐县| 论坛| 湖州市| 禹城市| 大埔县| 盐源县| 贵州省| 个旧市| 镇远县| 苍梧县| 高邮市| 澎湖县| 富源县| 宁远县| 武平县| 稷山县| 曲麻莱县| 石渠县| 湘潭市| 江山市| 左贡县| 金门县| 陕西省| 罗山县| 龙胜| 衡东县| 镇赉县| 大渡口区| 舒兰市| 屯留县| 烟台市| 东兴市| 岳池县| 海门市| 鄄城县| 河池市| 会昌县| 武义县|