91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中的建造者模式是什么

發布時間:2021-07-20 16:01:52 來源:億速云 閱讀:178 作者:chen 欄目:開發技術

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

目錄
  • 引例

  • 一般解法

    • 代碼:

      • AbstractHouse(房子)

      • Bungalow(平房)

      • Villa (別墅)

      • 客戶端調用

  • 建造者模式

    • 建造者模式解法

      • 代碼:

        • House類(Product產品)

        • HouseBuilder類(Builder抽象建造者)

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

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

        • 5.HouseDirector類(Director指揮者)

        • 客戶端調用

    • 總結

      引例

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

      一般解法

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

      類圖:

      java中的建造者模式是什么

      代碼:

      AbstractHouse(房子)
      public abstract class AbstractHouse {
          public abstract void buildBasic();//打地基
          public abstract void buildWalls();//砌墻
          public abstract void buildRoof();//封頂
          public void build() { //建房
             buildBasic();  //三個步驟(注意順序)
             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("別墅封頂");
          }
      }
      客戶端調用
      public class Client {
          public static void main(String[] args) {
              Bungalow bungalow = new Bungalow();
              bungalow.build();
              Villa villa = new Villa();
              villa.build();
          }
      }

      運行結果:

      java中的建造者模式是什么

      缺點:

      程序不好擴展和維護,把產品和創建產品過程封裝在一起,耦合性高。

      解耦產品和創建產品過程=》建造者模式

      建造者模式

      建造者模式(Builder Pattern)又叫生成器模式,是一種對象構建模式。它可以將復雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的對象。

      一步一步創建一個復雜的對象,允許用戶只通過指定復雜對象的類型和內容就可以構建它們,而不需要知道內部的具體構建細節。

      類圖:

      java中的建造者模式是什么

      • Product(產品): 具體的產品對象

      • Builder(抽象建造者): 創建一個產品對象的各個部件指定的接口/抽象類。

      • ConcreteBuilder(具體建造者): 實現接口,構建和裝配各個部件。

      • Director(指揮者): 構建一個使用Builder接口的對象,負責控制產品對象的生產過程,隔離了客戶與對象的生產過程。

      建造者模式解法

      代碼:

      House類(Product產品)
      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();
          //建造房子好, 將產品(房子) 返回
          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;
          //構造器傳入 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();
          }
      }
      客戶端調用
      public class Client {
          public static void main(String[] args) {
              //蓋平房
              Bungalow commonHouse = new Bungalow();
              //準備創建房子的指揮者
              HouseDirector houseDirector = new HouseDirector(commonHouse);
              //完成蓋房子,返回產品(普通房子)
              House house = houseDirector.constructHouse();
              System.out.println("--------------------------");
              //蓋別墅
              Villa highBuilding = new Villa();
              //重置建造者
              houseDirector.setHouseBuilder(highBuilding);
              //完成蓋房子,返回產品(高樓)
              houseDirector.constructHouse();
          }
      }

      運行結果:

      java中的建造者模式是什么

      總結

      • 客戶端不必知道產品內部組成的細節,將產品本身與產品的創建過程解耦,使得相同的創建過程可以創建不同的產品對象。

      • 將復雜產品的創建步驟分解在不同的方法中,使得創建過程更加清晰。

      • 使用不同的具體建造者即可得到不同的產品對象。

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

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

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

      抽象工廠模式是對產品家族的創建,一個產品家族是一系列產品:具有不同分類維度的產品組合,采用抽象工廠模式不需要關心構建過程,只關心什么產品由什么工廠生產即可。

      而建造者模式則是要求按照指定的藍圖建造產品,它的主要目的是通過組裝零配件而產生一個新產品。

      到此,相信大家對“java中的建造者模式是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

      向AI問一下細節

      免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

      AI

      南乐县| 翁源县| 沭阳县| 四平市| 乾安县| 六盘水市| 江门市| 东阳市| 朔州市| 葵青区| 错那县| 望奎县| 古浪县| 缙云县| 城口县| 延吉市| 嵩明县| 太保市| 昌图县| 武义县| 汉寿县| 津市市| 永善县| 盐池县| 中西区| 延庆县| 子长县| 略阳县| 平南县| 青川县| 三穗县| 兴宁市| 龙江县| 尖扎县| 津市市| 稷山县| 桐梓县| 塔河县| 廉江市| 乌鲁木齐县| 沙洋县|