一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 理解java設(shè)計(jì)模式之建造者模式

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

2020-03-28 11:30cutter_point JAVA教程

這篇文章主要幫助大家理解java設(shè)計(jì)模式之建造者模式,對(duì)建造者模式,即生成器模式進(jìn)行實(shí)例講解,感興趣的朋友可以參考一下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.shejimoshi.create.Builder;
/**
 * 功能:意圖是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
 *     適用性:
 *       當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)
 *       當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)
 */
public abstract class PersonBuilder
{
  //繪畫(huà)一個(gè)人物需要使用到的工具
  protected String tool1;
  protected String tool2;
  
  public PersonBuilder(String t1, String t2)
  {
    this.tool1 = t1;
    this.tool2 = t2;
  }
  
  //繪畫(huà)頭
  public abstract void buildHead();
  //畫(huà)身體
  public abstract void buildBody();
  //畫(huà)左腳右腳
  public abstract void buildArmLeft();
  public abstract void buildArmRight();
  //畫(huà)左手右手
  public abstract void buildLegLeft();
  public abstract void buildLegRight();
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.shejimoshi.create.Builder;
 
 
/**
 * 功能:意圖是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
 *     適用性:
 *       當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)
 *       當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)
 */
public class PersonThinBuilder extends PersonBuilder
{
 
  public PersonThinBuilder(String t1, String t2)
  {
    super(t1, t2);
  }
 
  @Override
  public void buildHead()
  {
    System.out.println("畫(huà)出一個(gè)瘦子的頭");
  }
 
  @Override
  public void buildBody()
  {
    System.out.println("畫(huà)出一個(gè)瘦子的身體");
  }
 
  @Override
  public void buildArmLeft()
  {
    System.out.println("畫(huà)出瘦子的左臂");
  }
 
  @Override
  public void buildArmRight()
  {
    System.out.println("畫(huà)出瘦子的右臂");
  }
 
  @Override
  public void buildLegLeft()
  {
    System.out.println("畫(huà)出瘦子左腿");
  }
 
  @Override
  public void buildLegRight()
  {
    System.out.println("畫(huà)出瘦子的右腿");
  }
 
}

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.shejimoshi.create.Builder;
 
 
/**
 * 功能:意圖是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
 * 適用性:
 *    當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及它們的裝配方式時(shí)
 *    當(dāng)構(gòu)造過(guò)程必須允許被構(gòu)造的對(duì)象有不同的表示時(shí)
 */
public class PersonFatBuilder extends PersonBuilder
{
 
  public PersonFatBuilder(String t1, String t2)
  {
    super(t1, t2);
  }
 
  @Override
  public void buildHead()
  {
    System.out.println("畫(huà)出一個(gè)胖子的頭");
  }
 
  @Override
  public void buildBody()
  {
    System.out.println("畫(huà)出一個(gè)胖子的身體");
  }
 
  @Override
  public void buildArmLeft()
  {
    System.out.println("畫(huà)出胖子的左臂");
  }
 
  @Override
  public void buildArmRight()
  {
    System.out.println("畫(huà)出胖子的右臂");
  }
 
  @Override
  public void buildLegLeft()
  {
    System.out.println("畫(huà)出胖子左腿");
  }
 
  @Override
  public void buildLegRight()
  {
    System.out.println("畫(huà)出胖子的右腿");
  }
 
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();
  }
}

測(cè)試案例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.shejimoshi.create.Builder;
 
 
/**
 * 功能:客戶(hù)端程序
 */
public class Test
{
  //創(chuàng)建相應(yīng)的人物
  public static void create(PersonBuilder pb)
  {
    //借助參數(shù)傳過(guò)來(lái)的模型創(chuàng)建相應(yīng)的對(duì)象
    PersonDirector pd = new PersonDirector(pb);
    pd.createPerson();
  }
  
  public static void main(String []args)
  {
    PersonThinBuilder ptb = new PersonThinBuilder("圖像工具", "畫(huà)筆");
    create(ptb); //創(chuàng)建一個(gè)瘦子
    System.out.println("==============================================================");
    PersonFatBuilder pfb = new PersonFatBuilder("圖像工具", "畫(huà)筆");
    create(pfb);
  }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
畫(huà)出一個(gè)瘦子的頭
畫(huà)出一個(gè)瘦子的身體
畫(huà)出瘦子的左臂
畫(huà)出瘦子的右臂
畫(huà)出瘦子左腿
畫(huà)出瘦子的右腿
==============================================================
畫(huà)出一個(gè)胖子的頭
畫(huà)出一個(gè)胖子的身體
畫(huà)出胖子的左臂
畫(huà)出胖子的右臂
畫(huà)出胖子左腿
畫(huà)出胖子的右腿

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美日韩一区二区三区 | 亚洲狼人香蕉香蕉在线28 | 操美女b| 天天操精品| 欧美精品色精品一区二区三区 | 水野朝阳厨房系列在线观看 | 九九九九九九精品免费 | 99久久综合给久久精品 | 女医学护士一级毛片 | 好大水好多好爽好硬好深视频 | 97色轮| 性满足久久久久久久久 | 欧美成人福利 | 明星ai人脸替换造梦在线播放 | 奇米影视亚洲狠狠色 | 熟睡中的麻麻大白屁股小说 | 亚洲色图首页 | 精品四虎| 好紧水好多 | 日本高清免费观看 | 视频一区二区三区在线 | 亚洲精品资源在线 | 色综合视频一区二区观看 | 国产99久久久国产精品成人 | 日本欧美大码a在线视频播放 | 国产成人福利免费观看 | 国产男女爱视频在线观看 | 四神集团1涨奶是第几章 | 国产91免费在线 | 午夜AV内射一区二区三区红桃视 | 丰满岳乱妇在线观看视频国产 | 欧美日韩国产在线人成 | 国产a不卡片精品免费观看 国产aaa伦理片 | 午夜家庭影院 | 欧美成人精品福利在线视频 | 艹处女| 色网免费观看 | 91理论片午午伦夜理片久久 | 日韩精品一二三区 | 国内自拍2019 | 国产1广场舞丰满老女偷 |