熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

java設計模式之Builder(解耦過程和部件)

2022-06-13   來源: Java高級技術 

  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 ) {
      thisbuilder = builder;
    }
    // 將部件partA partB partC最後組成復雜對象
    //這裡是將車輪 方向盤和發動機組裝成汽車的過程
    public void construct() {
      builderbuildPartA();
      builderbuildPartB();
      builderbuildPartC();
    }
  }
  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 );
  
  nstruct();
  Product product = buildergetResult();
  
  Builder模式的應用
  在Java實際使用中我們經常用到(Pool)的概念當資源提供者無法提供足夠的資源並且這些資源需要被很多用戶反復共享時就需要使用池
  
  實際是一段內存當池中有一些復雜的資源的斷肢(比如數據庫的連接池也許有時一個連接會中斷)如果循環再利用這些斷肢將提高內存使用效率提高池的性能修改Builder模式中Director類使之能診斷斷肢斷在哪個部件上再修復這個部件
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27314.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.