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

理解java設(shè)計(jì)模式之建造者模式

 更新時(shí)間:2016年02月13日 17:12:13   作者:cutter_point  
這篇文章主要幫助大家理解java設(shè)計(jì)模式之建造者模式,對(duì)建造者模式,即生成器模式進(jìn)行實(shí)例講解,感興趣的朋友可以參考一下

建造者模式(Builder Pattern)主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”,在這其中“分步驟”是一個(gè)穩(wěn)定的算法,而復(fù)雜對(duì)象的各個(gè)部分則經(jīng)常變化。因此, 建造者模式主要用來(lái)解決“對(duì)象部分”的需求變化。 這樣可以對(duì)對(duì)象構(gòu)造的過(guò)程進(jìn)行更加精細(xì)的控制。

package com.shejimoshi.create.Builder;
/**
 * 功能:意圖是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
 *     適用性:
 *       當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)
 *       當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)
 */
public abstract class PersonBuilder
{
  //繪畫一個(gè)人物需要使用到的工具
  protected String tool1;
  protected String tool2;
  
  public PersonBuilder(String t1, String t2)
  {
    this.tool1 = t1;
    this.tool2 = t2;
  }
  
  //繪畫頭
  public abstract void buildHead();
  //畫身體
  public abstract void buildBody();
  //畫左腳右腳
  public abstract void buildArmLeft();
  public abstract void buildArmRight();
  //畫左手右手
  public abstract void buildLegLeft();
  public abstract void buildLegRight();
}

我們的抽象生成器派生出相應(yīng)的子類,用來(lái)構(gòu)造相應(yīng)的實(shí)際使用類型

package com.shejimoshi.create.Builder;


/**
 * 功能:意圖是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
 *     適用性:
 *       當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)
 *       當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)
 */
public class PersonThinBuilder extends PersonBuilder
{

  public PersonThinBuilder(String t1, String t2)
  {
    super(t1, t2);
  }

  @Override
  public void buildHead()
  {
    System.out.println("畫出一個(gè)瘦子的頭");
  }

  @Override
  public void buildBody()
  {
    System.out.println("畫出一個(gè)瘦子的身體");
  }

  @Override
  public void buildArmLeft()
  {
    System.out.println("畫出瘦子的左臂");
  }

  @Override
  public void buildArmRight()
  {
    System.out.println("畫出瘦子的右臂");
  }

  @Override
  public void buildLegLeft()
  {
    System.out.println("畫出瘦子左腿");
  }

  @Override
  public void buildLegRight()
  {
    System.out.println("畫出瘦子的右腿");
  }

}

package com.shejimoshi.create.Builder;


/**
 * 功能:意圖是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
 * 適用性:
 *    當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)
 *    當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)
 */
public class PersonFatBuilder extends PersonBuilder
{

  public PersonFatBuilder(String t1, String t2)
  {
    super(t1, t2);
  }

  @Override
  public void buildHead()
  {
    System.out.println("畫出一個(gè)胖子的頭");
  }

  @Override
  public void buildBody()
  {
    System.out.println("畫出一個(gè)胖子的身體");
  }

  @Override
  public void buildArmLeft()
  {
    System.out.println("畫出胖子的左臂");
  }

  @Override
  public void buildArmRight()
  {
    System.out.println("畫出胖子的右臂");
  }

  @Override
  public void buildLegLeft()
  {
    System.out.println("畫出胖子左腿");
  }

  @Override
  public void buildLegRight()
  {
    System.out.println("畫出胖子的右腿");
  }

}

我們的生成器交給指揮者來(lái)實(shí)現(xiàn)創(chuàng)建的動(dòng)作

package com.shejimoshi.create.Builder;


/**
 * 功能:創(chuàng)建人物的指揮者
 */
public class PersonDirector
{
  private PersonBuilder pb;
  
  //傳遞相應(yīng)的人物創(chuàng)建模型
  public PersonDirector(PersonBuilder pber)
  {
    this.pb = pber;
  }
  
  //創(chuàng)建一個(gè)人
  public void createPerson()
  {
    pb.buildHead();
    pb.buildBody();
    pb.buildArmLeft();
    pb.buildArmRight();
    pb.buildLegLeft();
    pb.buildLegRight();
  }
}

測(cè)試案例:

package com.shejimoshi.create.Builder;


/**
 * 功能:客戶端程序
 */
public class Test
{
  //創(chuàng)建相應(yīng)的人物
  public static void create(PersonBuilder pb)
  {
    //借助參數(shù)傳過(guò)來(lái)的模型創(chuàng)建相應(yīng)的對(duì)象
    PersonDirector pd = new PersonDirector(pb);
    pd.createPerson();
  }
  
  public static void main(String []args)
  {
    PersonThinBuilder ptb = new PersonThinBuilder("圖像工具", "畫筆");
    create(ptb); //創(chuàng)建一個(gè)瘦子
    System.out.println("==============================================================");
    PersonFatBuilder pfb = new PersonFatBuilder("圖像工具", "畫筆");
    create(pfb);
  }
}

運(yùn)行結(jié)果:

畫出一個(gè)瘦子的頭
畫出一個(gè)瘦子的身體
畫出瘦子的左臂
畫出瘦子的右臂
畫出瘦子左腿
畫出瘦子的右腿
==============================================================
畫出一個(gè)胖子的頭
畫出一個(gè)胖子的身體
畫出胖子的左臂
畫出胖子的右臂
畫出胖子左腿
畫出胖子的右腿

以上就是java建造者模式,希望對(duì)大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 使用java批量寫入環(huán)境變量的實(shí)現(xiàn)

    使用java批量寫入環(huán)境變量的實(shí)現(xiàn)

    本文主要介紹了使用java批量寫入環(huán)境變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Java中定時(shí)器Timer致命缺點(diǎn)案例詳解

    Java中定時(shí)器Timer致命缺點(diǎn)案例詳解

    這篇文章主要介紹了Java中定時(shí)器Timer致命缺點(diǎn),以Java中定時(shí)器Time為案例整理下我的學(xué)習(xí)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Java并發(fā)工具類之CountDownLatch詳解

    Java并發(fā)工具類之CountDownLatch詳解

    這篇文章主要介紹了Java并發(fā)工具類之CountDownLatch詳解,CountDownLatch可以使一個(gè)獲多個(gè)線程等待其他線程各自執(zhí)行完畢后再執(zhí)行,CountDownLatch可以解決那些一個(gè)或者多個(gè)線程在執(zhí)行之前必須依賴于某些必要的前提業(yè)務(wù)先執(zhí)行的場(chǎng)景,需要的朋友可以參考下
    2023-12-12
  • 初學(xué)者,Spring快速入門

    初學(xué)者,Spring快速入門

    本文主要講解了Spring框架的基礎(chǔ)知識(shí),Spring是一個(gè)輕量級(jí)的開源框架,它是為簡(jiǎn)化企業(yè)級(jí)應(yīng)用開發(fā)而生。文中運(yùn)用代碼非常詳細(xì)的介紹了相關(guān)知識(shí),需要了解的小伙伴可以參考一下哦
    2021-09-09
  • Spring @ComponentScan注解掃描組件原理

    Spring @ComponentScan注解掃描組件原理

    這篇文章主要介紹了Spring @ComponentScan自動(dòng)掃描組件使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • springboot參數(shù)傳中文亂碼的解決方案

    springboot參數(shù)傳中文亂碼的解決方案

    這篇文章主要介紹了springboot參數(shù)傳中文亂碼的解決方案,幫助大家更好的理解和學(xué)習(xí)使用springboot,感興趣的朋友可以了解下
    2021-03-03
  • 一招教你優(yōu)化Java代碼中大量的if/else

    一招教你優(yōu)化Java代碼中大量的if/else

    當(dāng)代碼已經(jīng)復(fù)雜到難以維護(hù)的程度之后,只能狠下心重構(gòu)優(yōu)化。那,有什么方案可以優(yōu)雅的優(yōu)化掉這些多余的if/else?本文就來(lái)和大家詳細(xì)聊聊
    2023-03-03
  • 解決springboot項(xiàng)目不配置數(shù)據(jù)源啟動(dòng)報(bào)錯(cuò)問(wèn)題

    解決springboot項(xiàng)目不配置數(shù)據(jù)源啟動(dòng)報(bào)錯(cuò)問(wèn)題

    這篇文章主要介紹了解決springboot項(xiàng)目不配置數(shù)據(jù)源啟動(dòng)報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java外部類與內(nèi)部類的關(guān)系詳解

    java外部類與內(nèi)部類的關(guān)系詳解

    本文詳細(xì)講解了java外部類與內(nèi)部類的關(guān)系,用代碼演示了外部類調(diào)用內(nèi)部類的方法。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • kafka生產(chǎn)者發(fā)送消息流程深入分析講解

    kafka生產(chǎn)者發(fā)送消息流程深入分析講解

    本文將介紹kafka的一條消息的發(fā)送流程,從消息的發(fā)送到服務(wù)端的存儲(chǔ)。上文說(shuō)到kafak分為客戶端與服務(wù)端,要發(fā)送消息就涉及到了網(wǎng)絡(luò)通訊,kafka采用TCP協(xié)議進(jìn)行客戶端與服務(wù)端的通訊協(xié)議
    2023-03-03

最新評(píng)論

民丰县| 常德市| 宝山区| 桑植县| 凤台县| 涿州市| 若尔盖县| 连江县| 富川| 顺平县| 绍兴县| 鹤庆县| 诸暨市| 武鸣县| 肥城市| 岑溪市| 筠连县| 克拉玛依市| 莱西市| 拉孜县| 灯塔市| 桐庐县| 澄城县| 故城县| 嘉兴市| 泰顺县| 嵊泗县| 南陵县| 璧山县| 西华县| 淄博市| 馆陶县| 永年县| 巩留县| 汾西县| 元江| 白水县| 琼海市| 西平县| 汝州市| 宁国市|