<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 前言 Builder(構造者)模式也是一種常用的設計模式,它是用來一步一步構建復雜事物而設計的模式,使用這種模式可以使得**復雜事物的構建與展示相分離**,具有降低耦合,向外部隱藏復雜事物的構建過程等優點。 Builder模式的使用場景: ?(1)相同的方法,不同的執行順序,產生不同的結果; ?(2)多個部件或零件,屬性都可以裝配到一個對象中,但是產生的運行又不相同; ?(3)產品類非常復雜,或者產品類中的調用順序不同產生不同的作用,這個時候用Builder模式非常合適; ?(4)當初始化一個對象特別復雜,如:參數屬性多,且很多參數都有默認值。 ### Builder模式的實現 以生產汽車為例展示Builder模式的過程。我們知道汽車有很多零件,什么方向盤,發動機,輪子等等,同時它還有一個屬性,如:名稱,價格,級別等。這些都要汽車生產商來完成,那么汽車生產商就是Builder。汽車生產好了以后要投入市場出售,這時汽車會在汽車商城展示。 1、汽車 –>要構建的復雜的事物 ~~~ public class Car { private String name; // 名稱:寶馬,奔馳,奧迪... private String price; // 價格,3萬,10萬... private String grade; // 級別,小型車,中型車,大型車 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; } @Override public String toString() { return "Car [name=" + name + ", price=" + price + ", grade=" + grade + "]"; } } ~~~ 這里只為了展示Builder模式,所以不涉及零件或者屬性等具體的實現。 2、汽車生產商–>CarBuilder.java ~~~ public class CarBuilder { private String name; private String price; private String grade; /** * 構造名稱 */ public CarBuilder buildName(String name){ this.name = name; return this; } /** * 構造價格 */ public CarBuilder buildPrice(String price){ this.price = price; return this; } /** * 構造級別 */ public CarBuilder buildGrade(String grade){ this.grade = grade; return this; } /** * 生產汽車 */ public Car create(){ Car car= new Car(); car.setName(name); car.setPrice(price); car.setGrade(grade); return car; } } ~~~ 通常來說,Builder的setter會返回自身this,這樣可以實現鏈表式操作,這里的CarBuilder代表汽車生產商,模擬汽車的生產過程。 3、汽車商城(展示汽車)–>CarShow.java ~~~ public class CarShow { private CarBuilder builder; public CarShow(CarBuilder builder){ this.builder = builder; } public Car getCar(){ return builder.create(); } } ~~~ 這一步有時候也往往會省略,即只有Builder,這只實現汽車的一個展示的過程,客戶也可以直接去汽車生產商那買汽車,不用去汽車商城買汽車。 4、客戶挑選汽車–>Test.java ~~~ public class Test { public static void main(String[] args) { CarBuilder builder = new CarBuilder(); builder.buildName("寶馬"); builder.buildPrice("100萬"); builder.buildGrade("小型車"); Car car = builder.create(); System.out.println(new CarShow(builder).getCar()); } } ~~~ 結果: ![這里寫圖片描述](https://box.kancloud.cn/2016-03-17_56ea5b36b8610.jpg "") 即:客戶實際看到的汽車是100萬的小型車寶馬 總結:上面的這些就是Builder的過程,通常就是兩步,即:構建和展示。有時候會省略展示的過程,直接由構建者Builder完成構建和展示。上面的例子不是為了初始化一個Car對象而是為了通過這種模式模擬實現汽車的構造和展示相分離。如果我們將Builder設置成一個接口或者抽象類,那么傳入不同的Buidler就可以得到不同的汽車,這樣一來這種模式的靈活性和可擴展性就大大提高了,而且耦合性非常低。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看