亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

建造者(Builder)模式

系統 2191 0

有些情況下,一個對象會有一些重要的性質,在它們沒有恰當的值之前,對象不能作為一個完整的產品使用。比如,一個電子郵件有發件人地址、收件人地址、主題、內容、附錄等部分,而在最起碼的收件人地址未被賦值之前,這個電子郵件不能發出。

有些情況下,一個對象的一些性質必須按照某個順序賦值才有意義。在某個性質沒有賦值之前,另一個性質則無法賦值。這些情況使得性質本身的建造涉及到復雜的商業邏輯。

這時候,此對象相當于一個有待建造的產品,而對象的這些性質相當于產品的零件,建造產品的過程就是組合零件的過程。由于組合零件的過程很復雜,因此,這些"零件"的組合過程往往被"外部化"到一個稱作建造者的對象里,建造者返還給客戶端的是一個全部零件都建造完畢的產品對象。

一,結構

?

?

?

?

?

?

?

?

?

?

?

?

?

?

建造者(Builder)角色: 給出一個抽象接口,以規范產品對象的各個組成成分的建造。一般而言,此接口獨立于應用程序的商業邏輯。模式中直接創建產品對象的是具體建造者(ConcreteBuilder)角色。具體建造者類必須實現這個接口所要求的方法:一個是建造方法,另一個是結果返還方法。

具體建造者(Concrete Builder)角色: 擔任這個角色的是于應用程序緊密相關的類,它們在應用程序調用下創建產品實例。這個角色主要完成的任務包括:

實現Builder角色提供的接口,一步一步完成創建產品實例的過程。

在建造過程完成后,提供產品的實例。

指導者(Director)角色: 擔任這個角色的類調用具體建造者角色以創建產品對象。導演者并沒有產品類的具體知識,真正擁有產品類的具體知識的是具體建造者對象。

產品(Product)角色: 產品便是建造中的復雜對象。

指導者角色是于客戶端打交道的角色。導演者角色將客戶端創建產品的請求劃分為對各個零件的建造請求,再將這些請求委派給具體建造者角色。具體建造者角色是做具體建造工作的,但卻不為客戶端所知。

二,示例代碼

    import java.util.ArrayList;

/**
 * 指導者
 * @author Salmon
 *
 */
public class Director {
  public void construct( Builder builder )
  {
    builder.buildPartA();
    builder.buildPartB();
  }
}

/**
 * 建造者
 * @author Salmon
 *
 */
public interface Builder {
  public void buildPartA();
  public void buildPartB();
  public Product getResult();
}

/**
 * 具體建造者
 * @author Salmon
 *
 */
public class ConcreteBuilder1 implements Builder
{
  private Product product;
  
  public void buildPartA() {
    product = new Product();
    product.add( "PartA" );
  }

  public void buildPartB()
  {
    product.add( "PartB" );
  }
  public Product getResult()
  {
    return product;
  }
}

/**
 * 具體建造者
 * @author Salmon
 *
 */
public class ConcreteBuilder2 implements Builder
{
  private Product product;

  public void buildPartA(){
    product = new Product();
    product.add( "PartX" );
  }

  public void buildPartB()
  {
    product.add( "PartY" );
  }

  public Product getResult()
  {
    return product;
  }
}

/**
 * 產品
 * @author Salmon
 *
 */
public class Product
{
  ArrayList<String> parts = new ArrayList<String>();

  public void add( String part )
  {
    parts.add( part );
  }

  public void show()
  {
    System.out.println( " Product Parts -------" );
    for(String part : parts)
      System.out.println( part );
  }
}

/**
 * 客戶端代碼
 * @author Salmon
 *
 */
public class Client
{
  public static void main( String[] args )
  {
    // Create director and builders
    Director director = new Director( );

    Builder b1 = new ConcreteBuilder1();
    Builder b2 = new ConcreteBuilder2();

    // Construct two products
    director.construct( b1 );
    Product p1 = b1.getResult();
    p1.show();

    director.construct( b2 );
    Product p2 = b2.getResult();
    p2.show();
  }
}
  

?

建造者(Builder)模式


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美曰韩免费视频一区 | 最新国产精品视频 | 伊人手机在线视频 | 日本中文在线播放 | 久久色伊人 | 中国一级毛片视频 | 最近中文字幕在线 | 中文 | 伊色综合久久之综合久久 | 亚洲人成影院在线高清 | 99久久久久国产精品免费 | 亚洲国产成人久久一区久久 | 亚洲精品国自产拍影院 | 国产女人伦码一区二区三区不卡 | 12至16末成年毛片 | 青青青爽视频在线观看 | 天天射综合网站 | 奇米第四色网站 | 日韩欧免费一区二区三区 | 2018天天操 | 亚洲国产精品视频在线观看 | 久久精品综合网 | 日本特黄a级高清免费大片18 | 久久久久夜夜夜精品国产 | 九九视频这里只有精品 | 一级无毛片 | 中文字幕三级在线不卡 | 国产一区二区三区精品久久呦 | 久久精品成人欧美大片免费 | 中文字幕日韩欧美 | 夜夜爽天天狠狠九月婷婷 | 一本大道香蕉中文在线高清 | 亚洲精品成人一区二区 | 日日做夜夜爱 | 精品欧美一区手机在线观看 | 婷婷六月色 | 老妇毛片久久久久久久久 | 在线日产一区二区 | 一本色道久久爱88a 一本色道久久爱88av俺来也 | 日韩一区二区三区在线观看 | 国产成人啪午夜精品网站 | 欧美一级网址 |