設計模式—— 十一 :建造者模式

      網友投稿 861 2022-05-29

      文章目錄

      什么是建造者模式?

      建造者模式優缺點

      優點

      缺點

      建造者模式的應用場景

      什么是建造者模式?

      建造者模式(Builder Pattern)也叫做生成器模式,其定義如下:

      建造者模式一步一步創建一個復雜的對象,它允許用戶只通過指定復雜對象的類型和內容就 可以構建它們,用戶不需要知道內部的具體構建細節。

      建造者模式的通用類圖如圖11-1所示

      在建造者模式結構圖中包含如下幾個角色:

      ● Builder(抽象建造者):它為創建一個產品Product對象的各個部件指定抽象接口,在該接口中一般聲明兩類方法,一類方法是buildPartX(),它們用于創建復雜對象的各個部件;另一 類方法是getResult(),它們用于返回復雜對象。Builder既可以是抽象類,也可以是接口。

      ●ConcreteBuilder(具體建造者):它實現了Builder接口,實現各個部件的具體構造和裝配方 法,定義并明確它所創建的復雜對象,也可以提供一個方法返回創建好的復雜產品對象。

      ●Product(產品角色):它是被構建的復雜對象,包含多個組成部件,具體建造者創建該產品 的內部表示并定義它的裝配過程。

      ● Director(指揮者):指揮者又稱為導演類,它負責安排復雜對象的建造次序,指揮者與抽 象建造者之間存在關聯關系,可以在其construct()建造方法中調用建造者對象的部件構造與裝 配方法,完成復雜對象的建造??蛻舳艘话阒恍枰c指揮者進行交互,在客戶端確定具體建 造者的類型,并實例化具體建造者對象(也可以通過配置文件和反射機制),然后通過指揮 者類的構造函數或者Setter方法將該對象傳入指揮者類中。

      建造者模式的通用源代碼也比較簡單。

      Product(產品角色)

      在建造者模式的定義中提到了復雜對象,那么什么是復雜對象?簡單來說,復雜對象是指那 些包含多個成員屬性的對象,這些成員屬性也稱為部件或零件,如汽車包括方向盤、發動 機、輪胎等部件,電子郵件包括發件人、收件人、主題、內容、附件等部件

      public class Product { private String partA; //定義部件,部件可以是任意類型 private String partB; private String partC; //省略getter、setter方法 }

      1

      2

      3

      4

      5

      6

      7

      Builder(抽象建造者)

      在抽象類Builder中聲明了一系列抽象的buildPartX()方法用于創建復雜產品的各個部件,具體 建造過程在ConcreteBuilder中實現,此外還提供了工廠方法getResult(),用于返回一個建造好的完整產品。

      public abstract class Builder { //創建產品對象 protected Product product=new Product(); public abstract void buildPartA(); public abstract void buildPartB(); public abstract void buildPartC(); //返回產品對象 public Product getResult() { return product; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      ConcreteBuilder(具體建造者)

      在ConcreteBuilder中實現了buildPartX()方法,通過調用Product的setPartX()方法可以給產品對象 的成員屬性設值。不同的具體建造者在實現buildPartX()方法時將有所區別,如setPartX()方法 的參數可能不一樣,在有些具體建造者類中某些setPartX()方法無須實現(提供一個空實 現)。而這些對于客戶端來說都無須關心,客戶端只需知道具體建造者類型即可。

      public class ConcreteProduct extends Builder{ @Override public void buildPartA() { //具體實現 } @Override public void buildPartB() { //具體實現 } @Override public void buildPartC() { //具體實現 } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      Director(指揮者)

      指揮者類Director主要有兩個作用:一方面它隔離 了客戶與創建過程;另一方面它控制產品的創建過程,包括某個buildPartX()方法是否被調用 以及多個buildPartX()方法調用的先后次序等。指揮者針對抽象建造者編程,客戶端只需要知 道具體建造者的類型,即可通過指揮者類調用建造者的相關方法,返回一個完整的產品對 象。在實際生活中也存在類似指揮者一樣的角色,如一個客戶去購買電腦,電腦銷售人員相 當于指揮者,只要客戶確定電腦的類型,電腦銷售人員可以通知電腦組裝人員給客戶組裝一 臺電腦。

      public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public void setBuilder(Builder builder) { this.builder = builder; } //產品構建與組裝方法 public Product construct() { builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); return builder.getResult(); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      設計模式—— 十一 :建造者模式

      10

      11

      12

      13

      14

      15

      16

      17

      18

      導演類起到封裝的作用,避免高層模塊深入到建造者內部的實現類。當然,在建造者模 式比較龐大時,導演類可以有多個。

      建造者模式優缺點

      優點

      ● 封裝性 使用建造者模式可以使客戶端不必知道產品內部組成的細節。

      ● 建造者獨立,容易擴展 BenzBuilder和BMWBuilder是相互獨立的,對系統的擴展非常有利。

      ● 便于控制細節風險 由于具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任 何影響。

      缺點

      ● 建造者模式所創建的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異 性很大,例如很多組成部分都不相同,不適合使用建造者模式,因此其使用范圍受到一定的 限制。

      ● 如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大,增加系統的理解難度和運行成本。

      建造者模式的應用場景

      需要生成的產品對象有復雜的內部結構,這些產品對象通常包含多個成員屬性。

      需要生成的產品對象的屬性相互依賴,需要指定其生成順序。

      對象的創建過程獨立于創建該對象的類。在建造者模式中通過引入了指揮者類,將創建過 程封裝在指揮者類中,而不在建造者類和客戶類中。

      隔離復雜對象的創建和使用,并使得相同的創建過程可以創建不同的產品。

      ?? 設計模式—— 十 :模板方法模式

      ?? 設計模式—— 十二 :代理模式

      參考:

      【1】:《設計模式之禪》

      【2】:《design pattern java》

      【3】:《研磨設計模式》

      通用類

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

      上一篇:Spark-Redis工作篇:執行海量數據插入、查詢作業時碰到的問題
      下一篇:TMS320F2837x開發例程使用手冊(2)
      相關文章
      亚洲国产日韩综合久久精品| 337p日本欧洲亚洲大胆艺术| 亚洲欧洲日本在线观看 | 亚洲色成人网站WWW永久| 国产亚洲精品美女久久久久| 亚洲Av无码国产一区二区| 亚洲综合偷自成人网第页色| 亚洲黄色激情视频| 91亚洲国产成人久久精品 | 亚洲成a人无码av波多野按摩| 亚洲欧美乱色情图片| 亚洲欧美中文日韩视频| 亚洲另类小说图片| 亚洲国产日韩在线人成下载| 亚洲视频免费在线看| 亚洲爱情岛论坛永久| 亚洲国产人成精品| 亚洲大香伊人蕉在人依线| 亚洲综合精品一二三区在线| 亚洲AV永久无码精品| 亚洲αⅴ无码乱码在线观看性色| 亚洲人成影院在线无码按摩店| 亚洲中文字幕无码不卡电影 | 久久亚洲精品AB无码播放| 亚洲另类激情综合偷自拍图| 国产尤物在线视精品在亚洲| 无码不卡亚洲成?人片| 亚洲精品无码av天堂| 亚洲区小说区激情区图片区| 亚洲今日精彩视频| 亚洲午夜国产精品无卡| 91午夜精品亚洲一区二区三区| 亚洲一区二区三区高清不卡| 亚洲中文字幕乱码一区| 亚洲AV无码之国产精品| 蜜臀亚洲AV无码精品国产午夜.| 亚洲А∨精品天堂在线| 亚洲午夜久久久久久久久久| 亚洲精品无码不卡在线播放HE| 亚洲av福利无码无一区二区 | 国产日产亚洲系列最新|