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

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

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

一、什么是建筑者模式?

  建造者模式(Builder Pattern)使用多個(gè)簡(jiǎn)單的對(duì)象一步一步構(gòu)建一個(gè)復(fù)雜的對(duì)象。

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

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

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

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

建造者模式中的四個(gè)角色:

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

java代碼實(shí)現(xiàn)

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

package com.designpattern.builderPattern;

/**
 * 對(duì)象 人
 *
 * @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)建的對(duì)象
   */
  Human createHuman();

}

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

package com.designpattern.builderPattern;

/**
 * 高個(gè)子的人
 *
 * @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("壯實(shí),高大的身體");
  }

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

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

  @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、建造者模式測(cè)試

package com.designpattern.builderPattern;

import org.junit.Test;

/**
 * 測(cè)試
 *
 * @author zhongtao on 2018/9/17
 */
public class BuilderPatternTest {

  /**
   * 測(cè)試建造者模式
   */
  @Test
  public void test() {
    HumanDirector humanDirector = new HumanDirector();
    //創(chuàng)建高個(gè)子的人
    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("------簡(jiǎn)單的分割線------");
    //創(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)缺點(diǎn)

優(yōu)點(diǎn):

建造者獨(dú)立,易擴(kuò)展。
便于控制細(xì)節(jié)風(fēng)險(xiǎn)。

缺點(diǎn):

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

注意事項(xiàng):

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

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

相關(guān)文章

  • SpringBoot使用Redis對(duì)用戶IP進(jìn)行接口限流的示例詳解

    SpringBoot使用Redis對(duì)用戶IP進(jìn)行接口限流的示例詳解

    使用接口限流的主要目的在于提高系統(tǒng)的穩(wěn)定性,防止接口被惡意打擊,這篇文章主要介紹了SpringBoot使用Redis對(duì)用戶IP進(jìn)行接口限流的示例代碼,需要的朋友可以參考下
    2023-07-07
  • SpringBoot 如何讀取pom.xml中的值

    SpringBoot 如何讀取pom.xml中的值

    這篇文章主要介紹了SpringBoot 如何讀取pom.xml中的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過程(前端篇)

    SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過程(前端篇)

    這篇文章主要介紹了SpringBoot+MyBatisPlus+Vue 前后端分離項(xiàng)目快速搭建過程(前端篇),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 如何基于SpringSecurity的@PreAuthorize實(shí)現(xiàn)自定義權(quán)限校驗(yàn)方法

    如何基于SpringSecurity的@PreAuthorize實(shí)現(xiàn)自定義權(quán)限校驗(yàn)方法

    spring Security提供有若干個(gè)過濾器,它們能夠攔截Servlet請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)給認(rèn)證和訪問決策管理器處理,從而增強(qiáng)安全性,下面這篇文章主要給大家介紹了關(guān)于如何基于SpringSecurity的@PreAuthorize實(shí)現(xiàn)自定義權(quán)限校驗(yàn)方法的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • java并發(fā)訪問重復(fù)請(qǐng)求過濾問題

    java并發(fā)訪問重復(fù)請(qǐng)求過濾問題

    本篇文章給大家分享了關(guān)于java并發(fā)訪問重復(fù)請(qǐng)求過濾的相關(guān)問題以及解決方法,對(duì)此有需要的朋友參考學(xué)習(xí)下。
    2018-05-05
  • Mybatis的Dao層實(shí)現(xiàn)原理分析

    Mybatis的Dao層實(shí)現(xiàn)原理分析

    這篇文章主要介紹了Mybatis的Dao層實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring源碼如何修改Bean的屬性用到的相關(guān)類

    Spring源碼如何修改Bean的屬性用到的相關(guān)類

    這篇文章主要介紹了Spring源碼如何修改Bean的屬性用到的相關(guān)類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • LinkedBlockingQueue鏈?zhǔn)阶枞?duì)列的使用和原理解析

    LinkedBlockingQueue鏈?zhǔn)阶枞?duì)列的使用和原理解析

    這篇文章主要介紹了LinkedBlockingQueue鏈?zhǔn)阶枞?duì)列的使用和原理解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • mybatis多數(shù)據(jù)源動(dòng)態(tài)切換的完整步驟

    mybatis多數(shù)據(jù)源動(dòng)態(tài)切換的完整步驟

    這篇文章主要給大家介紹了關(guān)于mybatis多數(shù)據(jù)源動(dòng)態(tài)切換的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 關(guān)于SpringBoot中的XA事務(wù)詳解

    關(guān)于SpringBoot中的XA事務(wù)詳解

    這篇文章主要介紹了關(guān)于SpringBoot中的XA事務(wù)詳解,事務(wù)管理可以確保數(shù)據(jù)的一致性和完整性,同時(shí)也可以避免數(shù)據(jù)丟失和沖突等問題。在分布式環(huán)境中,XA?事務(wù)是一種常用的事務(wù)管理方式,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

潮州市| 内乡县| 沽源县| 方山县| 东阳市| 霍城县| 海淀区| 河津市| 商都县| 阳高县| 新河县| 凤山市| 昭通市| 鲁甸县| 化德县| 晴隆县| 仙桃市| 平度市| 林甸县| 房山区| 商城县| 洪洞县| 桑日县| 株洲县| 武义县| 田东县| 大庆市| 阳朔县| 四子王旗| 凤冈县| 莱阳市| 普安县| 武清区| 深圳市| 土默特右旗| 城市| 东安县| 饶阳县| 洛阳市| 鄂伦春自治旗| 大安市|