欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

建造者(Builder)模式

系統 2058 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條評論
主站蜘蛛池模板: 91麻豆精东果冻天美传媒老狼 | 日日干日日插 | 久久综合偷拍 | 国产精品久久99 | 国产精品爱久久久久久久小说 | 成人欧美一区二区三区在线播放 | 色黄视频在线观看 | 欧美成人a∨高清免费观看 毛片特级 | 欧美色欧美亚洲高清在线视频 | 精品久久网 | 亚洲日韩中文字幕一区 | 国产视频资源在线观看 | 欧美一级毛片在线 | 久久精品无码一区二区日韩av | 91麻豆精品一二三区在线 | 欧美一级二级三级视频 | 欧美日韩综合视频 | 成人在线播放视频 | 全日本爽视频在线 | 精品日韩 | 中国大陆高清aⅴ毛片 | 三级视频在线观看 | 免费看的黄网站 | 免费一级欧美片片线观看 | 亚洲成a人在线观看 | 免费成人福利视频 | 欧美午夜性春猛交bbb | 久久精品人人做人人 | 免费小视频 | 日韩在线观看视频网站 | 99久久国产综合精品网成人影院 | v片在线看| 欧美18 - 19sex性 | 欧美 日韩 | 免费看的久久久久 | 日本香港三级和澳门三级 | 亚洲日本片| 久www | 成人免费视频网站在线观看 | 特片网久久 | 国内精品一区二区在线观看 |