最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

建造者模式_動力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年08月08日 10:22:49   投稿:mrr  
建造者實(shí)現(xiàn)抽象類的所有未實(shí)現(xiàn)的方法,具體來說一般是兩項(xiàng)任務(wù),組建產(chǎn)品;返回組建好的產(chǎn)品

定義:將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

類型:創(chuàng)建類模式

類圖:

四個(gè)要素

  • 產(chǎn)品類:一般是一個(gè)較為復(fù)雜的對象,也就是說創(chuàng)建對象的過程比較復(fù)雜,一般會有比較多的代碼量。在本類圖中,產(chǎn)品類是一個(gè)具體的類,而非抽象類。實(shí)際編程中,產(chǎn)品類可以是由一個(gè)抽象類與它的不同實(shí)現(xiàn)組成,也可以是由多個(gè)抽象類與他們的實(shí)現(xiàn)組成。
  • 抽象建造者:引入抽象建造者的目的,是為了將建造的具體過程交與它的子類來實(shí)現(xiàn)。這樣更容易擴(kuò)展。一般至少會有兩個(gè)抽象方法,一個(gè)用來建造產(chǎn)品,一個(gè)是用來返回產(chǎn)品。
  • 建造者:實(shí)現(xiàn)抽象類的所有未實(shí)現(xiàn)的方法,具體來說一般是兩項(xiàng)任務(wù):組建產(chǎn)品;返回組建好的產(chǎn)品。
  • 導(dǎo)演類:負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,導(dǎo)演類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與導(dǎo)演類直接交互的是建造者類。一般來說,導(dǎo)演類被用來封裝程序中易變的部分。

代碼實(shí)現(xiàn)

class Product { 
 private String name; 
 private String type; 
 public void showProduct(){ 
  System.out.println("名稱:"+name); 
  System.out.println("型號:"+type); 
 } 
 public void setName(String name) { 
  this.name = name; 
 } 
 public void setType(String type) { 
  this.type = type; 
 } 
} 
 abstract class Builder { 
 public abstract void setPart(String arg1, String arg2); 
 public abstract Product getProduct(); 
} 
class ConcreteBuilder extends Builder { 
 private Product product = new Product(); 
  
 public Product getProduct() { 
  return product; 
 } 
 public void setPart(String arg1, String arg2) { 
  product.setName(arg1); 
  product.setType(arg2); 
 } 
} 
 public class Director { 
 private Builder builder = new ConcreteBuilder(); 
 public Product getAProduct(){ 
  builder.setPart("寶馬汽車","X7"); 
  return builder.getProduct(); 
 } 
 public Product getBProduct(){ 
  builder.setPart("奧迪汽車","Q5"); 
  return builder.getProduct(); 
 } 
} 
public class Client { 
 public static void main(String[] args){ 
  Director director = new Director(); 
  Product product1 = director.getAProduct(); 
  product1.showProduct(); 
 
  Product product2 = director.getBProduct(); 
  product2.showProduct(); 
 } 
} 

建造者模式的優(yōu)點(diǎn)

        首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在導(dǎo)演類中對整體而言可以取得比較好的穩(wěn)定性。

        其次,建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過實(shí)現(xiàn)一個(gè)新的建造者類就可以完成,基本上不用修改之前已經(jīng)測試通過的代碼,因此也就不會對原有功能引入風(fēng)險(xiǎn)。 

建造者模式與工廠模式的區(qū)別

       我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個(gè)“導(dǎo)演類”的角色。在建造者模式的類圖中,假如把這個(gè)導(dǎo)演類看做是最終調(diào)用的客戶端,那么圖中剩余的部分就可以看作是一個(gè)簡單的工廠模式了。

       與工廠模式相比,建造者模式一般用來創(chuàng)建更為復(fù)雜的對象,因?yàn)閷ο蟮膭?chuàng)建過程更為復(fù)雜,因此將對象的創(chuàng)建過程獨(dú)立出來組成一個(gè)新的類——導(dǎo)演類。也就是說,工廠模式是將對象的全部創(chuàng)建過程封裝在工廠類中,由工廠類向客戶端提供最終的產(chǎn)品;而建造者模式中,建造者類一般只提供產(chǎn)品類中各個(gè)組件的建造,而將具體建造過程交付給導(dǎo)演類。由導(dǎo)演類負(fù)責(zé)將各個(gè)組件按照特定的規(guī)則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶端。 

總結(jié)

       建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產(chǎn)品的建造很復(fù)雜,那么請用工廠模式;如果產(chǎn)品的建造更復(fù)雜,那么請用建造者模式。

相關(guān)文章

  • Android截屏截圖的幾種方法總結(jié)

    Android截屏截圖的幾種方法總結(jié)

    這篇文章主要介紹了 Android截屏截圖方法匯總(Activity、View、ScrollView、ListView、RecycleView、WebView截屏截圖)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android四大組件:Activity/Service/Broadcast/ContentProvider作用示例

    Android是一種基于Linux,自由及開放源代碼的操作系統(tǒng),Android分為四個(gè)層,從高層到底層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和Linux內(nèi)核層,Android有四大基本組件:Activity、Service服務(wù)、BroadcastReceiver廣播接收器、Content Provider內(nèi)容提供者
    2023-11-11
  • Android開發(fā)之文本內(nèi)容自動朗讀功能實(shí)現(xiàn)方法

    Android開發(fā)之文本內(nèi)容自動朗讀功能實(shí)現(xiàn)方法

    這篇文章主要介紹了Android開發(fā)之文本內(nèi)容自動朗讀功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android自動朗讀TTS功能的操作步驟、相關(guān)函數(shù)使用方法與注意事項(xiàng),需要的朋友可以參考下
    2017-09-09
  • Android多媒體應(yīng)用使用MediaPlayer播放音頻

    Android多媒體應(yīng)用使用MediaPlayer播放音頻

    這篇文章主要為大家詳細(xì)介紹了Android多媒體應(yīng)用使用MediaPlayer播放音頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹

    Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹

    這篇文章主要介紹了Android 微信搖一搖功能實(shí)現(xiàn)詳細(xì)介紹的相關(guān)資料,并附實(shí)例代碼及實(shí)現(xiàn)微信搖一搖的思路,需要的朋友可以參考下
    2016-11-11
  • Flutter仿釘釘考勤日歷的示例代碼

    Flutter仿釘釘考勤日歷的示例代碼

    這篇文章主要介紹了Flutter仿釘釘考勤日歷的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • android實(shí)現(xiàn)獲取有線和無線Ip地址的方法

    android實(shí)現(xiàn)獲取有線和無線Ip地址的方法

    這篇文章主要介紹了android實(shí)現(xiàn)獲取有線和無線Ip地址的方法,較為詳細(xì)的分析了Android獲取IP地址的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • Android實(shí)現(xiàn)頁面滑動切換動畫

    Android實(shí)現(xiàn)頁面滑動切換動畫

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)頁面滑動切換動畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • android實(shí)現(xiàn)QQ微信側(cè)滑刪除效果

    android實(shí)現(xiàn)QQ微信側(cè)滑刪除效果

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)QQ微信側(cè)滑刪除效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android socket如何實(shí)現(xiàn)文件列表動態(tài)訪問

    Android socket如何實(shí)現(xiàn)文件列表動態(tài)訪問

    本文介紹Android socket實(shí)現(xiàn)文件列表動態(tài)訪問,訪問文件夾之后通過listview展示,并在點(diǎn)擊文件夾后進(jìn)入文件夾,獲得其內(nèi)容,有此需求的朋友可以參考下
    2021-06-06

最新評論

德格县| 泾川县| 平舆县| 陵川县| 孝感市| 平潭县| 丰城市| 湖南省| 成武县| 新干县| 宜丰县| 家居| 宣威市| 湘阴县| 蒙城县| 建德市| 仪陇县| 大新县| 宁阳县| 苗栗市| 米林县| 长丰县| 虹口区| 阿荣旗| 如东县| 镇平县| 铜陵市| 信阳市| 宝兴县| 保定市| 青川县| 延津县| 鄂尔多斯市| 建阳市| 阿克| 虎林市| 察隅县| 涟水县| 通榆县| 建阳市| 拉孜县|