国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

理解java設計模式之建造者模式

2019-11-26 14:35:48
字體:
來源:轉載
供稿:網友

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

package com.shejimoshi.create.Builder;/** * 功能:意圖是將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示 *     適用性: *       當創(chuàng)建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時 *       當構造過程必須允許被構造的對象有不同的表示時 */public abstract class PersonBuilder{  //繪畫一個人物需要使用到的工具  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();}

我們的抽象生成器派生出相應的子類,用來構造相應的實際使用類型

package com.shejimoshi.create.Builder;/** * 功能:意圖是將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示 *     適用性: *       當創(chuàng)建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時 *       當構造過程必須允許被構造的對象有不同的表示時 */public class PersonThinBuilder extends PersonBuilder{  public PersonThinBuilder(String t1, String t2)  {    super(t1, t2);  }  @Override  public void buildHead()  {    System.out.println("畫出一個瘦子的頭");  }  @Override  public void buildBody()  {    System.out.println("畫出一個瘦子的身體");  }  @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;/** * 功能:意圖是將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示 * 適用性: *    當創(chuàng)建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時 *    當構造過程必須允許被構造的對象有不同的表示時 */public class PersonFatBuilder extends PersonBuilder{  public PersonFatBuilder(String t1, String t2)  {    super(t1, t2);  }  @Override  public void buildHead()  {    System.out.println("畫出一個胖子的頭");  }  @Override  public void buildBody()  {    System.out.println("畫出一個胖子的身體");  }  @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("畫出胖子的右腿");  }}

我們的生成器交給指揮者來實現創(chuàng)建的動作

package com.shejimoshi.create.Builder;/** * 功能:創(chuàng)建人物的指揮者 */public class PersonDirector{  private PersonBuilder pb;    //傳遞相應的人物創(chuàng)建模型  public PersonDirector(PersonBuilder pber)  {    this.pb = pber;  }    //創(chuàng)建一個人  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)建相應的人物  public static void create(PersonBuilder pb)  {    //借助參數傳過來的模型創(chuàng)建相應的對象    PersonDirector pd = new PersonDirector(pb);    pd.createPerson();  }    public static void main(String []args)  {    PersonThinBuilder ptb = new PersonThinBuilder("圖像工具", "畫筆");    create(ptb); //創(chuàng)建一個瘦子    System.out.println("==============================================================");    PersonFatBuilder pfb = new PersonFatBuilder("圖像工具", "畫筆");    create(pfb);  }}

運行結果:

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

以上就是java建造者模式,希望對大家學習java程序設計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 萨嘎县| 林口县| 温州市| 隆子县| 岳西县| 灌南县| 荃湾区| 安阳市| 曲麻莱县| 石屏县| 抚顺县| 城步| 林甸县| 威海市| 临江市| 黑龙江省| 宣化县| 石首市| 托克托县| 炉霍县| 菏泽市| 青河县| 凤阳县| 泗阳县| 陆丰市| 专栏| 集贤县| 宁国市| 鄂托克前旗| 辽源市| 芮城县| 文水县| 尚义县| 沙雅县| 双流县| 五常市| 望奎县| 伊金霍洛旗| 泸定县| 广汉市| 微山县|