java建造者模式

      網友投稿 717 2025-04-03

      在現實生活中如果我們需要制造一個比較復雜的東西,比如手機,臺式電腦,或者汽車等。如果我們要制造一臺電腦的話我們會先將電腦所需的各個部件買回來然后在組裝起來成為一臺電腦。這里電腦所需的各個組件比如顯示器,CPU,硬盤等等都是由不同的廠商生產的,然后被我們不同的組合而成了不同的產品。這是現實生活中和建造者模式類似的場景,而在程序中也一樣有些情況下我們需要

      創建比較復雜的對象

      ,在這種場景下我們可以通過建造者模式來實現,

      建造者模式

      實際開發中,我們所需要的對象構建時非常復雜,且有很多步驟需要處理時,這時建造者模式就很適合。

      java建造者模式

      建造模式的本質:

      分離了對象子組件的

      單獨構造

      (由Builder來負責)和

      裝配

      (由Director負責)。 從而可以構造出復雜的對象。這個模式適用于:某個對象的構建過程復雜的情況下使用。

      由于實現了構建和裝配的解耦。不同的構建器,相同的裝配,也可以做出不同的對象;相同的構建器,不同的裝配順序也可以做出不同的對象。也就是實現了構建算法、裝配算法的解耦,實現了更好的復用

      程序實現

      類圖

      太空飛船

      創建我們的太空飛船類,也就是我們最終的產品類

      package com.dpb.build; /** * 太空飛船 * @author 波波烤鴨 * */ public class AirShip { // 軌道艙 private OrbitalModule orbitalModule; // 發動機 private Engine engine; // 逃生塔 private EscapeTower escapeTower; public void launch(){ System.out.println("發射..."); } public OrbitalModule getOrbitalModule() { return orbitalModule; } public void setOrbitalModule(OrbitalModule orbitalModule) { this.orbitalModule = orbitalModule; } public Engine getEngine() { return engine; } public void setEngine(Engine engine) { this.engine = engine; } public EscapeTower getEscapeTower() { return escapeTower; } public void setEscapeTower(EscapeTower escapeTower) { this.escapeTower = escapeTower; } } // 軌道艙 class OrbitalModule{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public OrbitalModule(String name) { super(); this.name = name; } } // 發動機 class Engine{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Engine(String name) { super(); this.name = name; } } // 逃生塔 class EscapeTower{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public EscapeTower(String name) { super(); this.name = name; } }

      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

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      組件構造者

      定義我們的組件構造者及實現組件構造者

      /** * 定義飛船建造的規則 * @author dengp * */ public interface AirShipBuild { OrbitalModule buildOrbitalModule(); Engine buildEngine(); EscapeTower buildeEscapeTower(); }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      package com.dpb.build; /** * 構建飛船相關的組件 * @author dengp * */ public class DpbAirShipBuild implements AirShipBuild{ @Override public OrbitalModule buildOrbitalModule() { System.out.println("烤鴨牌軌道艙"); return new OrbitalModule("烤鴨牌軌道艙"); } @Override public Engine buildEngine() { System.out.println("烤鴨牌發動機"); return new Engine("波波烤鴨牌發動機"); } @Override public EscapeTower buildeEscapeTower() { System.out.println("烤鴨牌逃生艙"); return new EscapeTower("烤鴨牌逃生塔"); } }

      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

      產品組裝

      定義產品組裝接口及組裝的實現

      package com.dpb.build; public interface AirShipDirector { // 組裝飛船 AirShip directorAirShip(); }

      1

      2

      3

      4

      5

      6

      7

      8

      package com.dpb.build; /** * 組裝波波牌飛船 * @author dengp * */ public class DpbAirShipDirector implements AirShipDirector{ private AirShipBuild build; public DpbAirShipDirector(AirShipBuild build) { super(); this.build = build; } @Override public AirShip directorAirShip() { // 通過構建工具分別構建各組件 Engine engine = build.buildEngine(); OrbitalModule orbitalModule = build.buildOrbitalModule(); EscapeTower escapeTower = build.buildeEscapeTower(); // 組裝相關組件 AirShip ship = new AirShip(); ship.setEngine(engine); ship.setEscapeTower(escapeTower); ship.setOrbitalModule(orbitalModule); return ship; } }

      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

      測試

      public class Client { public static void main(String[] args) { // 1.創建者 AirShipBuild build = new DpbAirShipBuild(); // 2.創建構建器 AirShipDirector director = new DpbAirShipDirector(build); AirShip ship = director.directorAirShip(); ship.launch(); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      輸出結果

      烤鴨牌發動機 烤鴨牌軌道艙 烤鴨牌逃生艙 發射...

      1

      2

      3

      4

      開發中應用場景:

      StringBuilder類的append方法

      SQL中的PreparedStatement

      JDOM中,DomBuilder、SAXBuilder

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel2007如何備注
      下一篇:excel數字如何轉換成大寫(excel中如何把數字轉換為大寫)
      相關文章
      wwwxxx亚洲| 在线亚洲午夜理论AV大片| 国产亚洲综合成人91精品| 爱情岛亚洲论坛在线观看| 亚洲va中文字幕| 国产精品亚洲综合久久| 亚洲成A∨人片在线观看无码| 亚洲四虎永久在线播放| 亚洲国产精彩中文乱码AV| 亚洲精品少妇30p| 亚洲精品国产字幕久久不卡| 亚洲香蕉网久久综合影视| 亚洲国产另类久久久精品黑人| 亚洲精品字幕在线观看| 亚洲深深色噜噜狠狠爱网站| 亚洲日韩小电影在线观看| 亚洲V无码一区二区三区四区观看| 亚洲国产精品va在线播放| 人人狠狠综合久久亚洲88| 久久亚洲精品无码| 中文字幕亚洲精品| 亚洲av专区无码观看精品天堂| 亚洲一级毛片在线播放| 亚洲最大无码中文字幕| 亚洲精品天堂无码中文字幕| 亚洲av午夜电影在线观看| 日韩亚洲精品福利| 精品国产人成亚洲区| 亚洲精品少妇30p| 亚洲黄色在线观看网站| 亚洲不卡视频在线观看| 亚洲色无码国产精品网站可下载| 亚洲成AV人片在WWW| 亚洲成AV人在线观看网址| 亚洲宅男天堂在线观看无病毒| 亚洲国产精品成人精品无码区在线 | 亚洲成a人无码av波多野按摩| 亚洲中文字幕无码爆乳av中文 | 亚洲熟妇少妇任你躁在线观看无码 | 亚洲av无码潮喷在线观看| 亚洲黄色中文字幕|