欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計模式之建造者模式(Builder模式)介紹

 更新時間:2015年03月12日 09:14:46   投稿:junjie  
這篇文章主要介紹了Java設(shè)計模式之建造者模式(Builder模式)介紹,本文講解了為何使用建造者模式、如何使用建造者模式、Builder模式的應(yīng)用等內(nèi)容,需要的朋友可以參考下

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

Builder模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶可以只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們。用戶不知道內(nèi)部的具體構(gòu)建細節(jié)。Builder模式是非常類似抽象工廠模式,細微的區(qū)別大概只有在反復(fù)使用中才能體會到。

為何使用建造者模式

是為了將構(gòu)建復(fù)雜對象的過程和它的部件解耦。注意:是解耦過程和部件。

因為一個復(fù)雜的對象,不但有很多大量組成部分,如汽車,有很多部件:車輪、方向盤、發(fā)動機,還有各種小零件等等,部件很多,但遠不止這些,如何將這些部件裝配成一輛汽車,這個裝配過程也很復(fù)雜(需要很好的組裝技術(shù)),Builder模式就是為了將部件和組裝過程分開。

如何使用建造者模式

首先假設(shè)一個復(fù)雜對象是由多個部件組成的,Builder模式是把復(fù)雜對象的創(chuàng)建和部件的創(chuàng)建分別開來,分別用Builder類和Director類來表示。

首先,需要一個接口,它定義如何創(chuàng)建復(fù)雜對象的各個部件:

復(fù)制代碼 代碼如下:

public interface Builder {
 //創(chuàng)建部件A  比如創(chuàng)建汽車車輪
 void buildPartA();
 //創(chuàng)建部件B 比如創(chuàng)建汽車方向盤
 void buildPartB();
 //創(chuàng)建部件C 比如創(chuàng)建汽車發(fā)動機
 void buildPartC();
 //返回最后組裝成品結(jié)果 (返回最后裝配好的汽車)
 //成品的組裝過程不在這里進行,而是轉(zhuǎn)移到下面的Director類中進行.
 //從而實現(xiàn)了解耦過程和部件
 Product getResult();
}

用Director構(gòu)建最后的復(fù)雜對象,而在上面Builder接口中封裝的是如何創(chuàng)建一個個部件(復(fù)雜對象是由這些部件組成的),也就是說Director的內(nèi)容是如何將部件最后組裝成成品:

復(fù)制代碼 代碼如下:

public class Director {
 private Builder builder;
 public Director( Builder builder ) {
  this.builder = builder;
 }
 // 將部件partA partB partC最后組成復(fù)雜對象
 //這里是將車輪 方向盤和發(fā)動機組裝成汽車的過程
 public void construct() {
  builder.buildPartA();
  builder.buildPartB();
  builder.buildPartC();
 }
}

Builder的具體實現(xiàn)ConcreteBuilder:

1.通過具體完成接口Builder來構(gòu)建或裝配產(chǎn)品的部件;
2.定義并明確它所要創(chuàng)建的是什么具體東西;
3.提供一個可以重新獲取產(chǎn)品的接口。

復(fù)制代碼 代碼如下:

public class ConcreteBuilder implements Builder {
 Part partA, partB, partC;
 public void buildPartA() {
  //這里是具體如何構(gòu)建partA的代碼
 };
 public void buildPartB() {
  //這里是具體如何構(gòu)建partB的代碼
 };
 public void buildPartC() {
  //這里是具體如何構(gòu)建partB的代碼
 };
 public Product getResult() {
  //返回最后組裝成品結(jié)果
 };
}

復(fù)雜對象:產(chǎn)品Product:

復(fù)制代碼 代碼如下:

    public interface Product { }

復(fù)雜對象的部件:
復(fù)制代碼 代碼如下:

    public interface Part { }

我們看看如何調(diào)用Builder模式:
復(fù)制代碼 代碼如下:

ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director( builder );
director.construct();
Product product = builder.getResult();

Builder模式的應(yīng)用

在Java實際使用中,我們經(jīng)常用到"池"(Pool)的概念,當(dāng)資源提供者無法提供足夠的資源,并且這些資源需要被很多用戶反復(fù)共享時,就需要使用池。

"池"實際是一段內(nèi)存,當(dāng)池中有一些復(fù)雜的資源的"斷肢"(比如數(shù)據(jù)庫的連接池,也許有時一個連接會中斷),如果循環(huán)再利用這些"斷肢",將提高內(nèi)存使用效率,提高池的性能。修改Builder模式中Director類使之能診斷"斷肢"斷在哪個部件上,再修復(fù)這個部件。

相關(guān)文章

  • 一次排查@CacheEvict注解失效的經(jīng)歷及解決

    一次排查@CacheEvict注解失效的經(jīng)歷及解決

    這篇文章主要介紹了一次排查@CacheEvict注解失效的經(jīng)歷及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java實現(xiàn)讀取帶合并單元格的Excel

    java實現(xiàn)讀取帶合并單元格的Excel

    這篇文章主要為大家詳細介紹了java如何實現(xiàn)讀取帶合并單元格的Excel,文中的示例代碼講解詳細, 感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • MyBatis動態(tài)創(chuàng)建表的實例代碼

    MyBatis動態(tài)創(chuàng)建表的實例代碼

    在項目需求中,我們經(jīng)常會遇到動態(tài)操作數(shù)據(jù)表的需求,常見的我們會把日志、設(shè)備實時位置信息等存入數(shù)據(jù)表,并且以一定時間段生成一個表來存儲。接下來通過本文給大家介紹MyBatis動態(tài)創(chuàng)建表的方法,感興趣的朋友一起看看吧
    2018-07-07
  • Java中的異常和處理機制實例詳解

    Java中的異常和處理機制實例詳解

    這篇文章主要介紹了Java中的異常和處理機制,結(jié)合實例形式詳細分析了Java異常與處理機制的相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2019-05-05
  • 基于Java回顧之JDBC的使用詳解

    基于Java回顧之JDBC的使用詳解

    本篇文章是對Java中JDBC的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Java面試題沖刺第二天--Redis篇

    Java面試題沖刺第二天--Redis篇

    這篇文章主要為大家分享了最有價值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java方法重載和方法重寫的區(qū)別到底在哪?

    Java方法重載和方法重寫的區(qū)別到底在哪?

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java方法重載和方法重寫的區(qū)別到底在哪展開,文中有非常詳細的解釋,需要的朋友可以參考下
    2021-06-06
  • 從字節(jié)碼角度解析synchronized和反射實現(xiàn)原理

    從字節(jié)碼角度解析synchronized和反射實現(xiàn)原理

    這篇文章主要介紹了從字節(jié)碼角度解析synchronized和反射的實現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • java中Integer包裝類裝箱的一個細節(jié)詳解

    java中Integer包裝類裝箱的一個細節(jié)詳解

    Java中的Integer是int的包裝類型,下面這篇文章主要給大家介紹了關(guān)于java中Integer包裝類裝箱的一個細節(jié)的相關(guān)資料,文中介紹的這個細節(jié)挺重要的,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧
    2018-07-07
  • Spring定時任務(wù)無故停止又不報錯的解決

    Spring定時任務(wù)無故停止又不報錯的解決

    這篇文章主要介紹了Spring定時任務(wù)無故停止又不報錯的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論