[設計模式-建立型]建造者(Builder)

來源:互聯網
上載者:User
概括

名稱

Builder

結構

動機

將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

適用性

  • 當建立複雜物件的演算法應該獨立於該對象的組成部分以及它們的裝配方式時。

  • 當構造過程必須允許被構造的對象有不同的表示時。

解析

形象比喻:

BUILDER—MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦,我有一個多種語言翻譯機,上面每種語言都有一個按鍵,見到MM我只要按對應的鍵,它就能夠用相應的語言說出“我愛你”這句話了,國外的MM也可以輕鬆搞定,這就是我的“我愛你”builder。(這一定比美軍在伊拉克用的翻譯機好賣)

建造模式:將對象的內部表象和對象的產生過程分割開來,從而使一個建造過程產生具有不同的內部表象的產品對象。建造模式使得產品內部表象可以獨立的變化,客戶不必知道產品內部組成的細節。建造模式可以強制實行一種分步驟進行的建造過程。

    1.Builder
      為建立一個Product對象的各個組件指定抽象介面。

    2.ConcreteBuilder
      實現Builder的介面以構造和裝配該產品的各個組件。
      定義並明確它所建立的表示。
      提供一個檢索產品的介面。

    3.Director
      構造一個使用Builder介面的對象。

    4.Product
      表示被構造的複雜物件。ConcreteBuilder建立該產品的內部表示並定義它的裝配過程。
      包含定義組成組件的類,包括將這些組件裝配成最終產品的介面。

執行個體

涉及的檔案有

IProductBuilder.java

   - SoftwareBuilder.java

Product.java

ProductDirector.java

TestMain.java

Product 是一個產品類,是一個簡單的java bean, 包含一些屬性及對應的set ,get 方法。

IProductBuilder和SoftwareBuilder, 構造器的介面和實作類別, 定義有一些方法執行個體化特定的 Product。

ProductDirector 使用Builder並調用相關方法返回構造的Product.

/**    * @author oscar999    * @date 2013-7-18 * @version V1.0    */package designptn.builder;public class Product {private String head;private String body;private String foot;/** * @return the head */public String getHead() {return head;}/** * @param head *            the head to set */public void setHead(String head) {this.head = head;}/** * @return the body */public String getBody() {return body;}/** * @param body *            the body to set */public void setBody(String body) {this.body = body;}/** * @return the foot */public String getFoot() {return foot;}/** * @param foot *            the foot to set */public void setFoot(String foot) {this.foot = foot;}}

/**    * @author oscar999    * @date 2013-7-18 * @version V1.0    */package designptn.builder;public interface IProductBuilder {void buildHead();void buildBody();void buildFoot();Product buildProduct();}

/**   * @author oscar999   * @date 2013-7-18* @version V1.0   */package designptn.builder;public class SoftwareBuilder implements IProductBuilder {    Product product;        public SoftwareBuilder(){    product = new Product();    }@Overridepublic void buildHead() {// TODO Auto-generated method stubproduct.setHead("Software Head");}@Overridepublic void buildBody() {// TODO Auto-generated method stubproduct.setBody("Software Body");}@Overridepublic void buildFoot() {// TODO Auto-generated method stubproduct.setFoot("Software Foot");}@Overridepublic Product buildProduct() {// TODO Auto-generated method stubreturn product;}}

/**    * @author oscar999    * @date 2013-7-18 * @version V1.0    */package designptn.builder;public class ProductDirector {public Product constructProduct(SoftwareBuilder pb) {pb.buildHead();pb.buildBody();pb.buildFoot();return pb.buildProduct();}}

/**   * @author oscar999   * @date 2013-7-18* @version V1.0   */package designptn.builder;public class TestMain {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubProductDirector pd = new ProductDirector();Product product = pd.constructProduct(new SoftwareBuilder());System.out.println(product.getHead());System.out.println(product.getBody());System.out.println(product.getFoot());}}

一言蔽之,就是不直接執行個體化需要的類,而是通過構造器構建。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.