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

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

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

    posts - 73,  comments - 55,  trackbacks - 0
    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模式的理解


    簡單地說,就好象我要一座房子住,可是我不知道怎么蓋(簡單的砌墻,層次較低),也不知道怎么樣設計(建幾個房間,幾個門好看,層次較高), 于是我需要找一幫民工,他們會砌墻,還得找個設計師,他知道怎么設計,我還要確保民工聽設計師的領導,而設計師本身也不干活,光是下命令,這里砌一堵墻,這里砌一扇門,這樣民工開始建設,最后,我可以向民工要房子了。在這個過程中,設計師是什么也沒有,除了他在腦子里的設計和命令,所以要房子也是跟民工要,記住了!

    就象國內好多企業上erp一樣,上erp,首先得找軟件公司呀,找到軟件公司后,軟件公司說,我只知道怎么寫軟件,就知道怎么實現,不清楚整個erp的流程。好,那我們還得找一個咨詢公司,好,找到德勤了,德勤說好,我要軟件怎么做,軟件公司怎么做,我就能保證軟件能為你們提供erp系統了。

    此模式是為了讓設計和施工解耦,互不干擾。


    package builder;

    public interface Builder
    {
    public? void makeWindow();
    public? void makeFloor();
    public? Room? getRoom();

    }


    /*************************************************************/
    package builder;

    public class Designer {

    ? public Designer() {
    ? }
    ? public void order(Builder? builder)?
    {
    ? builder.makeWindow();
    ? builder.makeFloor();

    }
    }

    /*************************************************************/
    package builder;
    public class Mingong? implements Builder{
    ? private? String window="";
    ? private? String floor="";
    ? public Mingong() {
    ? }
    ? public? void makeWindow(){
    ? window=new String("window");
    ? }
    ? public? void makeFloor(){
    ? floor=new String("floor");
    ? }
    ? public? Room? getRoom()
    ? {
    ? if((!window.equals(""))&&(!floor.equals("")))
    ??? {
    ??? Room r = new Room();
    ??? r.setFloor(floor);
    ??? r.setWindow(window);
    ??? return r;
    ??? }
    ? else return null;
    ? }
    }

    /*************************************************************/
    package builder;
    public class Room {
    ? private? String window="";
    ? private? String floor="";
    ? public Room() {
    ? }
    ?public String getFloor() {
    ??return floor;
    ?}

    ?public void setFloor(String floor) {
    ??this.floor = floor;
    ?}

    ?public String getWindow() {
    ??return window;
    ?}

    ?public void setWindow(String window) {
    ??this.window = window;
    ?}
    }
    /*************************************************************/

    package builder;

    public class Client {

    ? public Client() {
    ? }
    ? public static void main(String[] args) {
    ???? Builder mingong=new Mingong();
    ???? Designer? designer=new????? Designer();
    ???? designer.order(mingong);
    ?????Room r?= mingong.getRoom();
    ???? System.out.println(r.getWindow);//會輸出window,表示構建成功。
    ? }
    }

    posted on 2006-07-24 15:19 保爾任 閱讀(4363) 評論(4)  編輯  收藏 所屬分類: Design Patten

    FeedBack:
    # re: Builder(生成器)模式
    2010-11-15 18:51 | 南通SEO
    受教了  回復  更多評論
      
    # re: Builder(生成器)模式[未登錄]
    2012-11-05 16:49 | lb
    眾里尋他千百度 這才是我要的文章 謝謝分享  回復  更多評論
      
    # re: Builder(生成器)模式[未登錄]
    2013-02-27 13:55 | hgd
    設計和施工不要相互影響  回復  更多評論
      
    # re: Builder(生成器)模式
    2015-09-01 22:53 | 憂桑的可樂雞
    果斷收藏  回復  更多評論
      

    <2015年9月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费精品无码AV片在线观看| 亚洲精品伦理熟女国产一区二区| 色婷婷六月亚洲综合香蕉| 真实国产乱子伦精品免费| 亚洲日本va午夜中文字幕一区| 久久精品成人免费观看| 亚洲一区中文字幕久久| 久久久久久久久久国产精品免费| 亚洲va久久久噜噜噜久久| 无码人妻丰满熟妇区免费| 亚洲视频一区在线观看| 久久久久免费看黄A片APP| 亚洲日韩国产二区无码| 国产成人3p视频免费观看| 一道本在线免费视频| 亚洲精品美女久久久久99| 精品一区二区三区免费毛片爱| 亚洲黄网站wwwwww| 91成人免费观看网站| 最新亚洲人成无码网www电影| 亚洲欧洲精品成人久久曰影片 | 最好看的中文字幕2019免费| 亚洲日产2021三区在线| 成年女人男人免费视频播放| 真正全免费视频a毛片| 狠狠亚洲婷婷综合色香五月排名| 中国一级特黄高清免费的大片中国一级黄色片 | 毛色毛片免费观看| 国产亚洲精品成人久久网站| 国产亚洲日韩一区二区三区| 日批视频网址免费观看| 亚洲精品综合久久中文字幕| 日韩精品视频免费网址| 成在线人视频免费视频| 亚洲人成777在线播放| 久久久久亚洲AV无码专区网站| 麻豆成人久久精品二区三区免费| 亚洲精品无码久久| 亚洲精品无码Av人在线观看国产| 永久免费毛片在线播放| 精品无码国产污污污免费网站国产 |