欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 亚洲综合精品 | 热久久伊人 | 日韩看片| 日韩第一区 | 国产精品视频一区二区三区 | 国产日韩一区二区三区 | 久草在线观看福利视频 | 亚洲成人精品久久久 | aⅴ色国产 欧美 | 韩国一大片a毛片 | 国产嫩草影院在线观看 | 欧美成人精品一区二区男人看 | 日韩顶级片 | 一区二区三区四区国产 | 婷婷激情电影 | 亚洲一区二区三区在线免费观看 | 免费看黄色一级大片 | 国产精品啪一品二区三区粉嫩 | 成人精品一区二区三区校园激情 | 色综合在| 草草线在成人免费视频 | a级欧美片免费观看 | 爱爱视频天天干 | 一区二区三区毛A片特级 | 国产精品视屏 | 国产片侵犯亲女视频播放 | 国产精品亚洲第一区二区三区 | 亚洲视频一区二区三区 | 欧美一级二级在线观看 | av网址在线播放 | 成人欧美一区二区三区在线播放 | 艹逼视频免费 | 九九热免费视频在线观看 | 99久久久久久久 | 亚洲视频免费 | 偷偷狠狠的日日高清完整视频 | 91精品啪国产在线观看免费牛牛 | 久久综合久久久久 | 亚洲国产精品久久久久秋霞蜜臀 | 麻豆高清免费国产一区 | 久久久国产一区二区三区 |