<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      springboot 建造者設計模式

      一、什么是建造者模式

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

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

      二、角色組成

        product(產品角色):一個具體的產品對象

        builder(抽象建造者):創建一個product對象的各個部件指定的接口(抽象類),(接口和抽象類都可以做抽象層)抽象建造者只需要指定建造一個產品的流程,并不管具體的建造細節。

        concreteBuilder(具體建造者):實現接口/抽象類,構建和裝配各個部件。負責具體的建造細節。

        director(指揮者):構建一個使用builder接口的對象,它主要用于創建一個復雜的對象,主要有兩個作用:隔離客戶與對象生產的過程,負責控制產品對象的過程。

      三、應用場景

        盒飯套餐:餐廳有多種菜品,顧客可以選擇不同的菜,服務員按照顧客戶的要求,將這些菜組合起來,最終構建出一個完整的套餐。

        蓋房子:需要分多個階段進行,比如準備材料、打地基、蓋圍墻…。建造者模式可以將房屋的建造分解成多個步驟,每個步驟對應一個具體的建造者,最終由包  工頭(指導者)來調用不同的建造者,完成整個房子的建造。
        Stream API(Java):將集合類轉為stream流,通過一系列的中間操作和終止操作來生成最終結果。
      總的來說是:當創建一個復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。 當構造過程必須允許被構造的對象有不同的表示時。

      四、實現

        4.1 產品類

        

      public class Phone {
          private String cpu;
          private String screen;
          private String memory;
          private String mainboard;
          public Phone(String cpu, String screen, String memory, String mainboard) {
              this.cpu = cpu;
              this.screen = screen;
              this.memory = memory;
              this.mainboard = mainboard;
          }
          public String getCpu() {
              return cpu;
          }
          public void setCpu(String cpu) {
              this.cpu = cpu;
          }
          public String getScreen() {
              return screen;
          }
          public void setScreen(String screen) {
              this.screen = screen;
          }
          public String getMemory() {
              return memory;
          }
          public void setMemory(String memory) {
              this.memory = memory;
          }
          public String getMainboard() {
              return mainboard;
          }
          public void setMainboard(String mainboard) {
              this.mainboard = mainboard;
          }
          @Override
          public String toString() {
              return "Phone{" +
                      "cpu='" + cpu + '\'' +
                      ", screen='" + screen + '\'' +
                      ", memory='" + memory + '\'' +
                      ", mainboard='" + mainboard + '\'' +
                      '}';
          }
      }

      4.2 抽象建造者

      public interface Builder {
          void buildBoard(String board);
          void buildCpu(String cpu);
          void buildRam(String ram);
          void buildHardDisk(String hardDisk);
          Phone createPhone();
      }

      4.3 具體建造者

      public class AsusBuilder implements Builder {
          private Phone mPhone = new AsusPhone();
      
          @Override
          public void buildBoard(String board) {
              mPhone.setBoard(board);
          }
      
          @Override
          public void buildCpu(String cpu) {
              mPhone.setCpu(cpu);
          }
      
          @Override
          public void buildRam(String ram) {
              mPhone.setRam(ram);
          }
      
          @Override
          public void buildHardDisk(String hardDisk) {
              mPhone.setHardDisk(hardDisk);
          }
      
          @Override
          public Phone createPhone() {
              return mPhone;
          }
      }
      
      public class DellBuilder implements Builder {
          private Phone mPhone = new DellPhone();
      
          @Override
          public void buildBoard() {
              mPhone.setBoard("Asus Board");
          }
      
          @Override
          public void buildCpu() {
              mPhone.setCpu("Intel i7-8700K");
          }
      
          @Override
          public void buildRam() {
              mPhone.setRam("16GB DDR4");
          }
      
          @Override
          public void buildHardDisk() {
              mPhone.setHardDisk("1TB SSD");
          }
      
          @Override
          public Phone createPhone() {
              return mPhone;
          }
      }
      
      public class HPBuilder implements Builder {
          private Phone mPhone = new HPPhone();
      
          @Override
          public void buildBoard() {
              mPhone.setBoard("djkfj");
          }
      
          @Override
          public void buildCpu() {
              mPhone.setCpu("麒麟9000");
          }
      
          @Override
          public void buildRam() {
              mPhone.setRam("kdk22 ");
          }
      
          @Override
          public void buildHardDisk() {
              mPhone.setHardDisk("威海");
          }
      
          @Override
          public Phone createPhone() {
              return mPhone;
          }
      }

      4.4 指揮者

      public class Director {
          private Builder mBuilder;
      
          public Director(Builder builder) {
              this.mBuilder = builder;
          }
      
          public Phone buildPhone(String board, String cpu, String ram, String hardDisk) {
              mBuilder.buildBoard(board);
              mBuilder.buildCpu(cpu);
              mBuilder.buildRam(ram);
              mBuilder.buildHardDisk(hardDisk);
              return mBuilder.createPhone();
          }
      }

      4.5 測試類

      public class Client {
          public static void main(String[] args) {
              Builder asusBuilder = new AsusBuilder();
              Builder dellBuilder = new DellBuilder();
              // 指揮者創建對應的手機
              Director director = new Director(asusBuilder);
              Phone asusPhone = director.buildPhone();
              
              director = new Director(dellBuilder);
               Phone asusPhone =  director.buildPhone();
          }
      }

      分析:

        可以看到,根據不同的需求,建造者模式可以構造出不同的手機對象。每個手機對象的構建過程都由不同的建造者實現,在構建過程中可定制相應的屬性。最終,因為手機的構建過程和表示分離,所以同樣的構建過程可以創建出不同的表示。

      優缺點
      建造者模式的優點:
      1. 將構建復雜對象的過程封裝起來,簡化了代碼結構和邏輯。
      2. 不同的具體構造者可以實現不同的構建流程,使得同樣的構建過程可以創建不同的表示。
      3. 指導者類可以根據需要按照特定的順序執行構建流程,從而達到更好的控制和管理對象的構建。

      建造者模式的缺點:
      1. 添加新的部件需要修改抽象類和具體構造者的代碼。
      2. 如果對象的屬性較少,使用建造者模式可能會顯得過于復雜,不如直接使用工廠方法模式或簡單工廠模式。

      總之,建造者模式適用于需要創建對象復雜且變化多端的情景,它能夠將對象的構建過程標準化,從而達到代碼重用和簡化的目的

      原文鏈接:https://blog.csdn.net/Shine19/article/details/147023802

       

      posted @ 2025-07-21 11:19  krt-wanyi  閱讀(32)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 免费无码高潮流白浆视频| 高密市| 久久亚洲女同第一区综合| 体态丰腴的微胖熟女的特征| 午夜精品福利亚洲国产| 67194熟妇在线观看线路| 国产精品熟女一区二区三区| 精品一区二区中文字幕| 中国亚洲女人69内射少妇 | 亚洲欧美v国产一区二区| 九九热在线免费视频精品 | 亚洲aⅴ无码专区在线观看春色| 国产破外女出血视频| av老司机亚洲精品天堂| 人妻中文字幕精品系列| 国产av不卡一区二区| 久久亚洲色www成人| 国产一级精品毛片基地| 伊人久久大香线蕉网av| 久久精品一区二区日韩av| 国产欧美日韩高清在线不卡| av色蜜桃一区二区三区| 国产一区二区三区的视频| 久久永久视频| 果冻传媒一区二区天美传媒| 国产极品视频一区二区三区| 婷婷六月天在线| 亚洲日韩国产二区无码| 国产一区二区高清不卡| 99久久国语露脸精品国产| 久久国产乱子伦免费精品无码| 日韩人妻系列无码专区| 精品中文人妻在线不卡| 精品在免费线中文字幕久久| 亚洲国产日韩精品久久| 国产中文字幕在线精品| 国产91麻豆视频免费看| 国产色a在线观看| 亚洲精品一区二区三区蜜| 久久综合精品成人一本| 国产粉嫩美女一区二区三|