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

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)建細(xì)節(jié)。Builder模式是非常類似抽象工廠模式,細(xì)微的區(qū)別大概只有在反復(fù)使用中才能體會到。

為何使用建造者模式

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

因為一個復(fù)雜的對象,不但有很多大量組成部分,如汽車,有很多部件:車輪、方向盤、發(fā)動機(jī),還有各種小零件等等,部件很多,但遠(yuǎn)不止這些,如何將這些部件裝配成一輛汽車,這個裝配過程也很復(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ā)動機(jī)
 void buildPartC();
 //返回最后組裝成品結(jié)果 (返回最后裝配好的汽車)
 //成品的組裝過程不在這里進(jìn)行,而是轉(zhuǎn)移到下面的Director類中進(jìn)行.
 //從而實現(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ā)動機(jī)組裝成汽車的過程
 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)文章

  • java微信掃碼支付模式一線下支付功能實現(xiàn)

    java微信掃碼支付模式一線下支付功能實現(xiàn)

    本篇文章主要介紹了JAVA微信掃碼支付模式一線下支付功能實現(xiàn),具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • Java中RedisUtils工具類的使用

    Java中RedisUtils工具類的使用

    本文主要介紹了Java中RedisUtils工具類的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    下面小編就為大家?guī)硪黄赗estful接口調(diào)用方法總結(jié)(超詳細(xì))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java工程編碼格式由GBK轉(zhuǎn)化成utf-8的具體實現(xiàn)

    Java工程編碼格式由GBK轉(zhuǎn)化成utf-8的具體實現(xiàn)

    在寫項目的過程中我發(fā)現(xiàn)有的地方編碼格式被設(shè)置成了 gbk 如果用eclipse等工具直接改回utf-8編碼格式則會出現(xiàn)亂碼,所以本文給大家介紹了Java工程編碼格式由GBK轉(zhuǎn)化成utf-8的具體實現(xiàn),感興趣的朋友可以參考下
    2024-05-05
  • IntelliJ?IDEA無公網(wǎng)遠(yuǎn)程Linux服務(wù)器環(huán)境開發(fā)過程(推薦收藏)

    IntelliJ?IDEA無公網(wǎng)遠(yuǎn)程Linux服務(wù)器環(huán)境開發(fā)過程(推薦收藏)

    下面介紹如何在IDEA中設(shè)置遠(yuǎn)程連接服務(wù)器開發(fā)環(huán)境并結(jié)合Cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)無公網(wǎng)遠(yuǎn)程連接,然后實現(xiàn)遠(yuǎn)程Linux環(huán)境進(jìn)行開發(fā),感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • Java監(jiān)聽器三種實現(xiàn)方法代碼解析

    Java監(jiān)聽器三種實現(xiàn)方法代碼解析

    這篇文章主要介紹了Java監(jiān)聽器三種實現(xiàn)方法代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • java中將list用逗號隔開拼成字符串的4種方法例子

    java中將list用逗號隔開拼成字符串的4種方法例子

    我們經(jīng)常在開發(fā)過程之中會遇到需要把返回的Id list轉(zhuǎn)換為一個使用逗號(,)分隔的字符串,下面這篇文章主要給大家介紹了關(guān)于java中將list用逗號隔開拼成字符串的4種方法例子,需要的朋友可以參考下
    2024-01-01
  • spring boot 加載web容器tomcat流程源碼分析

    spring boot 加載web容器tomcat流程源碼分析

    本文章主要描述spring boot加載web容器 tomcat的部分,為了避免文章知識點(diǎn)過于分散,其他相關(guān)的如bean的加載,tomcat內(nèi)部流程等不做深入討論,具體內(nèi)容詳情跟隨小編一起看看吧
    2021-06-06
  • Java ClassLoader類加載器基礎(chǔ)詳解

    Java ClassLoader類加載器基礎(chǔ)詳解

    這篇文章主要為大家介紹了Java ClassLoader類加載器基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • spring-boot 如何實現(xiàn)單次執(zhí)行程序

    spring-boot 如何實現(xiàn)單次執(zhí)行程序

    這篇文章主要介紹了spring-boot 實現(xiàn)單次執(zhí)行程序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

嘉义市| 安图县| 成安县| 沙坪坝区| 江达县| 德安县| 贵阳市| 通江县| 兴业县| 龙南县| 车致| 日喀则市| 杂多县| 蒲江县| 四子王旗| 青海省| 长海县| 奉贤区| 伊宁县| 阳朔县| 花莲县| 婺源县| 若尔盖县| 东光县| 松溪县| 渑池县| 吴桥县| 长阳| 轮台县| 土默特右旗| 申扎县| 陇西县| 类乌齐县| 铜陵市| 河津市| 汉源县| 启东市| 津南区| 卢湾区| 百色市| 聊城市|