溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java中的建造者模式是什么

發(fā)布時(shí)間:2021-07-20 16:01:52 來源:億速云 閱讀:172 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“java中的建造者模式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“java中的建造者模式是什么”吧!

目錄
  • 引例

  • 一般解法

    • 代碼:

      • AbstractHouse(房子)

      • Bungalow(平房)

      • Villa (別墅)

      • 客戶端調(diào)用

  • 建造者模式

    • 建造者模式解法

      • 代碼:

        • House類(Product產(chǎn)品)

        • HouseBuilder類(Builder抽象建造者)

        • 3.Bungalow類(ConcreteBuilder具體建造者A)

        • 4.Villa類(ConcreteBuilder具體建造者B)

        • 5.HouseDirector類(Director指揮者)

        • 客戶端調(diào)用

    • 總結(jié)

      引例

      需求:建造房子,建造過程包括打地基、砌墻和封頂。房子各式各樣,包括平房和別墅,編程模擬實(shí)現(xiàn)。

      一般解法

      思路:定義房子類,包括建房的方法,然后定義平房和別墅繼承房子類,重寫相關(guān)方法。

      類圖:

      java中的建造者模式是什么

      代碼:

      AbstractHouse(房子)
      public abstract class AbstractHouse {
          public abstract void buildBasic();//打地基
          public abstract void buildWalls();//砌墻
          public abstract void buildRoof();//封頂
          public void build() { //建房
             buildBasic();  //三個(gè)步驟(注意順序)
             buildWalls();
             buildRoof();
          }
      }
      Bungalow(平房)
      public class Bungalow extends AbstractHouse{
          @Override
          public void buildBasic() {
              System.out.println("平房打地基");
          }
          @Override
          public void buildWalls() {
              System.out.println("平房砌墻");
          }
          @Override
          public void buildRoof() {
              System.out.println("平房封頂");
          }
      }
      Villa (別墅)
      public class Villa extends AbstractHouse{
          @Override
          public void buildBasic() {
              System.out.println("別墅打地基");
          }
          @Override
          public void buildWalls() {
              System.out.println("別墅砌墻");
          }
          @Override
          public void buildRoof() {
              System.out.println("別墅封頂");
          }
      }
      客戶端調(diào)用
      public class Client {
          public static void main(String[] args) {
              Bungalow bungalow = new Bungalow();
              bungalow.build();
              Villa villa = new Villa();
              villa.build();
          }
      }

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

      java中的建造者模式是什么

      缺點(diǎn):

      程序不好擴(kuò)展和維護(hù),把產(chǎn)品和創(chuàng)建產(chǎn)品過程封裝在一起,耦合性高。

      解耦產(chǎn)品和創(chuàng)建產(chǎn)品過程=》建造者模式

      建造者模式

      建造者模式(Builder Pattern)又叫生成器模式,是一種對(duì)象構(gòu)建模式。它可以將復(fù)雜對(duì)象的建造過程抽象出來(抽象類別),使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對(duì)象。

      一步一步創(chuàng)建一個(gè)復(fù)雜的對(duì)象,允許用戶只通過指定復(fù)雜對(duì)象的類型和內(nèi)容就可以構(gòu)建它們,而不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。

      類圖:

      java中的建造者模式是什么

      • Product(產(chǎn)品): 具體的產(chǎn)品對(duì)象

      • Builder(抽象建造者): 創(chuàng)建一個(gè)產(chǎn)品對(duì)象的各個(gè)部件指定的接口/抽象類。

      • ConcreteBuilder(具體建造者): 實(shí)現(xiàn)接口,構(gòu)建和裝配各個(gè)部件。

      • Director(指揮者): 構(gòu)建一個(gè)使用Builder接口的對(duì)象,負(fù)責(zé)控制產(chǎn)品對(duì)象的生產(chǎn)過程,隔離了客戶與對(duì)象的生產(chǎn)過程。

      建造者模式解法

      代碼:

      House類(Product產(chǎn)品)
      public class House {
          private String baise;
          private String wall;
          private String roof;
      }
      HouseBuilder類(Builder抽象建造者)
      public abstract class HouseBuilder {
          protected House house = new House();
          //將建造的流程寫好, 抽象的方法
          public abstract void buildBasic();
          public abstract void buildWalls();
          public abstract void buildRoof();
          //建造房子好, 將產(chǎn)品(房子) 返回
          public House buildHouse() {
              return house;
          }
      }
      3.Bungalow類(ConcreteBuilder具體建造者A)
      public class Bungalow extends HouseBuilder {
          @Override
          public void buildBasic() {
              System.out.println("平房打地基");
          }
          @Override
          public void buildWalls() {
              System.out.println("平房砌墻");
          }
          @Override
          public void buildRoof() {
              System.out.println("平房封頂");
          }
      }
      4.Villa類(ConcreteBuilder具體建造者B)
      public class Villa extends HouseBuilder {
          @Override
          public void buildBasic() {
              System.out.println("別墅打地基");
          }
          @Override
          public void buildWalls() {
              System.out.println("別墅砌墻");
          }
          @Override
          public void buildRoof() {
              System.out.println("別墅封頂");
          }
      }
      5.HouseDirector類(Director指揮者)
      public class HouseDirector {
          HouseBuilder houseBuilder = null;
          //構(gòu)造器傳入 houseBuilder
          public HouseDirector(HouseBuilder houseBuilder) {
              this.houseBuilder = houseBuilder;
          }
          //通過setter 傳入 houseBuilder
          public void setHouseBuilder(HouseBuilder houseBuilder) {
              this.houseBuilder = houseBuilder;
          }
          //如何處理建造房子的流程,交給指揮者
          public House constructHouse() {
              houseBuilder.buildBasic();
              houseBuilder.buildWalls();
              houseBuilder.buildRoof();
              return houseBuilder.buildHouse();
          }
      }
      客戶端調(diào)用
      public class Client {
          public static void main(String[] args) {
              //蓋平房
              Bungalow commonHouse = new Bungalow();
              //準(zhǔn)備創(chuàng)建房子的指揮者
              HouseDirector houseDirector = new HouseDirector(commonHouse);
              //完成蓋房子,返回產(chǎn)品(普通房子)
              House house = houseDirector.constructHouse();
              System.out.println("--------------------------");
              //蓋別墅
              Villa highBuilding = new Villa();
              //重置建造者
              houseDirector.setHouseBuilder(highBuilding);
              //完成蓋房子,返回產(chǎn)品(高樓)
              houseDirector.constructHouse();
          }
      }

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

      java中的建造者模式是什么

      總結(jié)

      • 客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對(duì)象。

      • 將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰。

      • 使用不同的具體建造者即可得到不同的產(chǎn)品對(duì)象。

      • 增加新的具體建造者無須修改原有代碼。

      • 若產(chǎn)品間的差異很大,則不適合使用建造者模式。

      • 抽象工廠模式VS建造者模式

      抽象工廠模式是對(duì)產(chǎn)品家族的創(chuàng)建,一個(gè)產(chǎn)品家族是一系列產(chǎn)品:具有不同分類維度的產(chǎn)品組合,采用抽象工廠模式不需要關(guān)心構(gòu)建過程,只關(guān)心什么產(chǎn)品由什么工廠生產(chǎn)即可。

      而建造者模式則是要求按照指定的藍(lán)圖建造產(chǎn)品,它的主要目的是通過組裝零配件而產(chǎn)生一個(gè)新產(chǎn)品。

      到此,相信大家對(duì)“java中的建造者模式是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

      向AI問一下細(xì)節(jié)

      免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

      AI