<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hengheng123456789

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks

    Builder模式定義:
    將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.

    Builder模式是一步一步創建一個復雜的對象,它允許用戶可以只通過指定復雜對象的類型和內容就可以構建它們.用戶不知道內部的具體構建細節.Builder模式是非常類似抽象工廠模式,細微的區別大概只有在反復使用中才能體會到.

    為何使用?
    是為了將構建復雜對象的過程和它的部件解耦.注意: 是解耦過程部件.

    因為一個復雜的對象,不但有很多大量組成部分,如汽車,有很多部件:車輪 方向盤 發動機還有各種小零件等等,部件很多,但遠不止這些,如何將這些部件裝配成一輛汽車,這個裝配過程也很復雜(需要很好的組裝技術),Builder模式就是為了將部件和組裝過程分開.

    如何使用?
    首先假設一個復雜對象是由多個部件組成的,Builder模式是把復雜對象的創建和部件的創建分別開來,分別用Builder類和Director類來表示.

    首先,需要一個接口,它定義如何創建復雜對象的各個部件:

    public interface Builder {

      //創建部件A  比如創建汽車車輪
      void buildPartA();
      //創建部件B 比如創建汽車方向盤
      void buildPartB();
      //創建部件C 比如創建汽車發動機
      void buildPartC();

      //返回最后組裝成品結果 (返回最后裝配好的汽車)
      //成品的組裝過程不在這里進行,而是轉移到下面的Director類中進行.
      //從而實現了解耦過程部件
      Product getResult();

    }

    用Director構建最后的復雜對象,而在上面Builder接口中封裝的是如何創建一個個部件(復雜對象是由這些部件組成的),也就是說Director的內容是如何將部件最后組裝成成品:

    public class Director {

      private Builder builder;

      public Director( Builder builder ) {
        this.builder = builder;
      }
      // 將部件partA partB partC最后組成復雜對象
      //這里是將車輪 方向盤和發動機組裝成汽車的過程
      public void construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();

      }

    }

    Builder的具體實現ConcreteBuilder:
    通過具體完成接口Builder來構建或裝配產品的部件;
    定義并明確它所要創建的是什么具體東西;
    提供一個可以重新獲取產品的接口:

    public class ConcreteBuilder implements Builder {

      Part partA, partB, partC;
      public void buildPartA() {
        //這里是具體如何構建partA的代碼

      };
      public void buildPartB() {
        //這里是具體如何構建partB的代碼
      };
       public void buildPartC() {
        //這里是具體如何構建partB的代碼
      };
       public Product getResult() {
        //返回最后組裝成品結果
      };

    }

    復雜對象:產品Product:

    public interface Product { }

    復雜對象的部件:

    public interface Part { }


    我們看看如何調用Builder模式:
    ConcreteBuilder builder = new ConcreteBuilder();
    Director director = new Director( builder );

    director.construct();????//部件的創建
    Product product = builder.getResult();? //對象(產品)的創建

    Builder模式的應用
    在Java實際使用中,我們經常用到"池"(Pool)的概念,當資源提供者無法提供足夠的資源,并且這些資源需要被很多用戶反復共享時,就需要使用池.

    "池"實際是一段內存,當池中有一些復雜的資源的"斷肢"(比如數據庫的連接池,也許有時一個連接會中斷),如果循環再利用這些"斷肢",將提高內存使用效率,提高池的性能.修改Builder模式中Director類使之能診斷"斷肢"斷在哪個部件上,再修復這個部件.

    posted on 2007-03-16 13:52 哼哼 閱讀(247) 評論(0)  編輯  收藏 所屬分類: Design Pattern
    主站蜘蛛池模板: 日本永久免费a∨在线视频| 在线观看免费大黄网站| 色屁屁在线观看视频免费| 亚洲日韩乱码中文无码蜜桃| 国产亚洲精品a在线观看| 毛片a级三毛片免费播放| 免费A级毛片av无码| XXX2高清在线观看免费视频| 狼人大香伊蕉国产WWW亚洲| 久久精品亚洲AV久久久无码| 91亚洲国产成人精品下载| 亚洲色成人WWW永久网站| 亚洲国产精品成人| 麻豆精品国产免费观看| 少妇高潮太爽了在线观看免费| 国产一区二区免费视频| 亚洲精品国产日韩无码AV永久免费网| 亚洲首页国产精品丝袜| 亚洲黄网站wwwwww| 久久久无码精品亚洲日韩蜜桃| 亚洲无线一二三四区手机| 免费人成无码大片在线观看| 成人免费一区二区无码视频| 久久国产乱子伦精品免费一 | 免费国产在线视频| 青青操免费在线视频| 香蕉免费在线视频| 一区二区三区在线免费| 无码精品人妻一区二区三区免费| 亚洲aⅴ无码专区在线观看| 亚洲精品无码一区二区| 亚洲AV无码一区二区乱子仑| 亚洲欧美综合精品成人导航| 亚洲日韩精品国产3区| 亚洲精品无码av片| 亚洲色大情网站www| 国产亚洲人成在线播放| 免费国产污网站在线观看不要卡| 特级毛片A级毛片100免费播放 | 亚洲国产电影av在线网址| 国产精品亚洲不卡一区二区三区|