欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

理解java設(shè)計(jì)模式之建造者模式

 更新時(shí)間:2016年02月13日 17:12:13   作者:cutter_point  
這篇文章主要幫助大家理解java設(shè)計(jì)模式之建造者模式,對建造者模式,即生成器模式進(jìn)行實(shí)例講解,感興趣的朋友可以參考一下

建造者模式(Builder Pattern)主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對象”,在這其中“分步驟”是一個(gè)穩(wěn)定的算法,而復(fù)雜對象的各個(gè)部分則經(jīng)常變化。因此, 建造者模式主要用來解決“對象部分”的需求變化。 這樣可以對對象構(gòu)造的過程進(jìn)行更加精細(xì)的控制。

package com.shejimoshi.create.Builder;
/**
 * 功能:意圖是將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
 *     適用性:
 *       當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時(shí)
 *       當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示時(shí)
 */
public abstract class PersonBuilder
{
  //繪畫一個(gè)人物需要使用到的工具
  protected String tool1;
  protected String tool2;
  
  public PersonBuilder(String t1, String t2)
  {
    this.tool1 = t1;
    this.tool2 = t2;
  }
  
  //繪畫頭
  public abstract void buildHead();
  //畫身體
  public abstract void buildBody();
  //畫左腳右腳
  public abstract void buildArmLeft();
  public abstract void buildArmRight();
  //畫左手右手
  public abstract void buildLegLeft();
  public abstract void buildLegRight();
}

我們的抽象生成器派生出相應(yīng)的子類,用來構(gòu)造相應(yīng)的實(shí)際使用類型

package com.shejimoshi.create.Builder;


/**
 * 功能:意圖是將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
 *     適用性:
 *       當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時(shí)
 *       當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示時(shí)
 */
public class PersonThinBuilder extends PersonBuilder
{

  public PersonThinBuilder(String t1, String t2)
  {
    super(t1, t2);
  }

  @Override
  public void buildHead()
  {
    System.out.println("畫出一個(gè)瘦子的頭");
  }

  @Override
  public void buildBody()
  {
    System.out.println("畫出一個(gè)瘦子的身體");
  }

  @Override
  public void buildArmLeft()
  {
    System.out.println("畫出瘦子的左臂");
  }

  @Override
  public void buildArmRight()
  {
    System.out.println("畫出瘦子的右臂");
  }

  @Override
  public void buildLegLeft()
  {
    System.out.println("畫出瘦子左腿");
  }

  @Override
  public void buildLegRight()
  {
    System.out.println("畫出瘦子的右腿");
  }

}

package com.shejimoshi.create.Builder;


/**
 * 功能:意圖是將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
 * 適用性:
 *    當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時(shí)
 *    當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同的表示時(shí)
 */
public class PersonFatBuilder extends PersonBuilder
{

  public PersonFatBuilder(String t1, String t2)
  {
    super(t1, t2);
  }

  @Override
  public void buildHead()
  {
    System.out.println("畫出一個(gè)胖子的頭");
  }

  @Override
  public void buildBody()
  {
    System.out.println("畫出一個(gè)胖子的身體");
  }

  @Override
  public void buildArmLeft()
  {
    System.out.println("畫出胖子的左臂");
  }

  @Override
  public void buildArmRight()
  {
    System.out.println("畫出胖子的右臂");
  }

  @Override
  public void buildLegLeft()
  {
    System.out.println("畫出胖子左腿");
  }

  @Override
  public void buildLegRight()
  {
    System.out.println("畫出胖子的右腿");
  }

}

我們的生成器交給指揮者來實(shí)現(xiàn)創(chuàng)建的動(dòng)作

package com.shejimoshi.create.Builder;


/**
 * 功能:創(chuàng)建人物的指揮者
 */
public class PersonDirector
{
  private PersonBuilder pb;
  
  //傳遞相應(yīng)的人物創(chuàng)建模型
  public PersonDirector(PersonBuilder pber)
  {
    this.pb = pber;
  }
  
  //創(chuàng)建一個(gè)人
  public void createPerson()
  {
    pb.buildHead();
    pb.buildBody();
    pb.buildArmLeft();
    pb.buildArmRight();
    pb.buildLegLeft();
    pb.buildLegRight();
  }
}

測試案例:

package com.shejimoshi.create.Builder;


/**
 * 功能:客戶端程序
 */
public class Test
{
  //創(chuàng)建相應(yīng)的人物
  public static void create(PersonBuilder pb)
  {
    //借助參數(shù)傳過來的模型創(chuàng)建相應(yīng)的對象
    PersonDirector pd = new PersonDirector(pb);
    pd.createPerson();
  }
  
  public static void main(String []args)
  {
    PersonThinBuilder ptb = new PersonThinBuilder("圖像工具", "畫筆");
    create(ptb); //創(chuàng)建一個(gè)瘦子
    System.out.println("==============================================================");
    PersonFatBuilder pfb = new PersonFatBuilder("圖像工具", "畫筆");
    create(pfb);
  }
}

運(yùn)行結(jié)果:

畫出一個(gè)瘦子的頭
畫出一個(gè)瘦子的身體
畫出瘦子的左臂
畫出瘦子的右臂
畫出瘦子左腿
畫出瘦子的右腿
==============================================================
畫出一個(gè)胖子的頭
畫出一個(gè)胖子的身體
畫出胖子的左臂
畫出胖子的右臂
畫出胖子左腿
畫出胖子的右腿

以上就是java建造者模式,希望對大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論