亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java實現(xiàn)建造者模式(Builder Pattern)

 更新時間:2021年10月12日 14:15:33   作者:ZT1994  
這篇文章主要為大家詳細介紹了java實現(xiàn)建造者模式Builder Pattern,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、什么是建筑者模式?

  建造者模式(Builder Pattern)使用多個簡單的對象一步一步構(gòu)建一個復雜的對象。

  一個 Builder 類會一步一步構(gòu)造最終的對象,該 Builder 類獨立于其他對象。

  建造者模式主要解決在軟件系統(tǒng)中,有時候面臨著"一個復雜對象"的創(chuàng)建工作,其通常由各個部分的子對象用一定的算法構(gòu)成;由于需求的變化,這個復雜對象的各個部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對穩(wěn)定。

二、建造者模式的具體實現(xiàn)

結(jié)構(gòu)圖

建造者模式中的四個角色:

1、Builder:給出一個抽象接口,以規(guī)范產(chǎn)品對象的各個組成成分的建造。這個接口規(guī)定要實現(xiàn)復雜對象的哪些部分的創(chuàng)建,并不涉及具體的對象部件的創(chuàng)建。
2、ConcreteBuilder:實現(xiàn)Builder接口,針對不同的商業(yè)邏輯,具體化復雜對象的各部分的創(chuàng)建。 在建造過程完成后,提供產(chǎn)品的實例。
3、Director:調(diào)用具體建造者來創(chuàng)建復雜對象的各個部分,在指導者中不涉及具體產(chǎn)品的信息,只負責保證對象各部分完整創(chuàng)建或按某種順序創(chuàng)建。
4、Product:要創(chuàng)建的復雜對象。

java代碼實現(xiàn)

1、創(chuàng)建人類實體類

package com.designpattern.builderPattern;

/**
 * 對象 人
 *
 * @author zhongtao on 2018/9/17
 */
public class Human {

  private String head;
  private String body;
  private String hand;
  private String foot;

  public String getHead() {
    return head;
  }

  public void setHead(String head) {
    this.head = head;
  }

  public String getBody() {
    return body;
  }

  public void setBody(String body) {
    this.body = body;
  }

  public String getHand() {
    return hand;
  }

  public void setHand(String hand) {
    this.hand = hand;
  }

  public String getFoot() {
    return foot;
  }

  public void setFoot(String foot) {
    this.foot = foot;
  }
}

2、創(chuàng)建造人的 Builder 接口

package com.designpattern.builderPattern;

/**
 * 造人接口 規(guī)定造人的規(guī)范 需要頭、身體、手、腳
 *
 * @author zhongtao on 2018/9/17
 */
public interface BuilderHuman {

  void buildHead();

  void buildBody();

  void buildHand();

  void buildFoot();

  /**
   * 返回創(chuàng)建的對象
   */
  Human createHuman();

}

3、ConcreteBuilder 創(chuàng)建不同類型的人
tallPerson

package com.designpattern.builderPattern;

/**
 * 高個子的人
 *
 * @author zhongtao on 2018/9/17
 */
public class TallPersonBuilder implements BuilderHuman {

  Human human;

  public TallPersonBuilder() {
    human = new Human();
  }

  @Override
  public void buildHead() {
    human.setHead("普通的頭腦");
  }

  @Override
  public void buildBody() {
    human.setBody("壯實,高大的身體");
  }

  @Override
  public void buildHand() {
    human.setHand("長手");
  }

  @Override
  public void buildFoot() {
    human.setFoot("長腳");
  }

  @Override
  public Human createHuman() {
    return human;
  }
}

smartHuman

package com.designpattern.builderPattern;

/**
 * 聰明的人
 *
 * @author zhongtao on 2018/9/17
 */
public class SmartHumanBuilder implements BuilderHuman {

  Human human;

  public SmartHumanBuilder() {
    human = new Human();
  }

  @Override
  public void buildHead() {
    human.setHead("高智商的頭腦");
  }

  @Override
  public void buildBody() {
    human.setBody("健康的身體");
  }

  @Override
  public void buildHand() {
    human.setHand("普通的手");
  }

  @Override
  public void buildFoot() {
    human.setFoot("普通的腳");
  }

  @Override
  public Human createHuman() {
    return human;
  }
}

4、Director 建造者模式的核心 調(diào)用具體建造者來創(chuàng)建不同的人

package com.designpattern.builderPattern;

/**
 * 管理造人的順序 BuilderHuman不同,則創(chuàng)建的人不同
 * @author zhongtao on 2018/9/17
 */
public class HumanDirector {

  public Human createHumanByDirector(BuilderHuman builderHuman){
    builderHuman.buildHead();
    builderHuman.buildBody();
    builderHuman.buildHand();
    builderHuman.buildFoot();

    return builderHuman.createHuman();
  }
}

5、建造者模式測試

package com.designpattern.builderPattern;

import org.junit.Test;

/**
 * 測試
 *
 * @author zhongtao on 2018/9/17
 */
public class BuilderPatternTest {

  /**
   * 測試建造者模式
   */
  @Test
  public void test() {
    HumanDirector humanDirector = new HumanDirector();
    //創(chuàng)建高個子的人
    Human humanByDirector = humanDirector.createHumanByDirector(new TallPersonBuilder());
    System.out.println(humanByDirector.getHead());
    System.out.println(humanByDirector.getBody());
    System.out.println(humanByDirector.getHand());
    System.out.println(humanByDirector.getFoot());

    System.out.println("------簡單的分割線------");
    //創(chuàng)建聰明的人
    Human smartHuman = humanDirector.createHumanByDirector(new SmartHumanBuilder());
    System.out.println(smartHuman.getHead());
    System.out.println(smartHuman.getBody());
    System.out.println(smartHuman.getHand());
    System.out.println(smartHuman.getFoot());
  }
}

三、建造者模式的優(yōu)缺點

優(yōu)點:

建造者獨立,易擴展。
便于控制細節(jié)風險。

缺點:

產(chǎn)品必須有共同點,范圍有限制。
如內(nèi)部變化復雜,會有很多的建造類。

注意事項:

與工廠模式的區(qū)別,建造者模式更加關(guān)注與零件裝配的順序。

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

相關(guān)文章

  • SpringBoot+Redis+Lua防止IP重復防刷攻擊的方法

    SpringBoot+Redis+Lua防止IP重復防刷攻擊的方法

    本文主要介紹了SpringBoot+Redis+Lua防止IP重復防刷攻擊的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換

    Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換

    Jackson是一個強大工具,可用于Json、XML、實體之間的相互轉(zhuǎn)換,JacksonXmlElementWrapper用于指定List等集合類,外圍標簽名,JacksonXmlProperty指定包裝標簽名,或者指定標簽內(nèi)部屬性名,JacksonXmlRootElement指定生成xml根標簽的名字,JacksonXmlText指定當前這個值
    2024-05-05
  • java基于servlet實現(xiàn)文件上傳功能

    java基于servlet實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了java基于servlet實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Java實現(xiàn)List去重的幾種方法總結(jié)

    Java實現(xiàn)List去重的幾種方法總結(jié)

    這篇文章主要為大家詳細介紹了Java中List去重的幾種常用方法總結(jié),文中的示例代碼講解詳細,具有一定的學習和參考價值,需要的小伙伴可以了解一下
    2023-09-09
  • java 設(shè)計模式之單例的實例詳解

    java 設(shè)計模式之單例的實例詳解

    這篇文章主要介紹了java 設(shè)計模式之單例的實例詳解的相關(guān)資料, 希望通過本文能幫助到大家,讓大家徹底理解掌握單例模式,需要的朋友可以參考下
    2017-09-09
  • SpringBoot解決BigDecimal傳到前端后精度丟失問題

    SpringBoot解決BigDecimal傳到前端后精度丟失問題

    這篇文章將通過示例詳細為大家介紹SpringBoot如何解決BigDecimal傳到前端后精度丟失問題,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-06-06
  • 深入解析Java多態(tài)進階學習

    深入解析Java多態(tài)進階學習

    java的動態(tài)綁定機制非常重要。這篇文章將帶大家更深入的學習一下Java的多態(tài),文中的示例代碼講解詳細,對我們學習Java有一定幫助,需要的可以參考一下
    2022-07-07
  • Java synchronized關(guān)鍵字使用方式及特性解析

    Java synchronized關(guān)鍵字使用方式及特性解析

    這篇文章主要介紹了Java synchronized關(guān)鍵字使用方式及特性解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot實現(xiàn)微信及QQ綁定登錄的示例代碼

    SpringBoot實現(xiàn)微信及QQ綁定登錄的示例代碼

    本文主要介紹了SpringBoot實現(xiàn)微信及QQ綁定登錄的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • SpringBoot使用AOP統(tǒng)一日志管理的方法詳解

    SpringBoot使用AOP統(tǒng)一日志管理的方法詳解

    這篇文章主要為大家分享一個干貨:超簡潔SpringBoot使用AOP統(tǒng)一日志管理,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起學習學習吧
    2022-05-05

最新評論