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

深入理解JavaScript系列(27):設(shè)計(jì)模式之建造者模式詳解

 更新時(shí)間:2015年03月03日 10:50:46   投稿:junjie  
這篇文章主要介紹了深入理解JavaScript系列(27):設(shè)計(jì)模式之建造者模式詳解,建造者模式可以將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示,需要的朋友可以參考下

介紹

在軟件系統(tǒng)中,有時(shí)候面臨著“一個(gè)復(fù)雜對(duì)象”的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法確相對(duì)穩(wěn)定。如何應(yīng)對(duì)這種變化?如何提供一種“封裝機(jī)制”來(lái)隔離出“復(fù)雜對(duì)象的各個(gè)部分”的變化,從而保持系統(tǒng)中的“穩(wěn)定構(gòu)建算法”不隨著需求改變而改變?這就是要說(shuō)的建造者模式。

建造者模式可以將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。也就是說(shuō)如果我們用了建造者模式,那么用戶就需要指定需要建造的類型就可以得到它們,而具體建造的過(guò)程和細(xì)節(jié)就不需要知道了。

正文

這個(gè)模式相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,先上代碼,然后再解釋

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

function getBeerById(id, callback) {
    // 使用ID來(lái)請(qǐng)求數(shù)據(jù),然后返回?cái)?shù)據(jù).
    asyncRequest('GET', 'beer.uri?id=' + id, function (resp) {
        // callback調(diào)用 response
        callback(resp.responseText);
    });
}

var el = document.querySelector('#test');
el.addEventListener('click', getBeerByIdBridge, false);

function getBeerByIdBridge(e) {
    getBeerById(this.id, function (beer) {
        console.log('Requested Beer: ' + beer);
    });
}

根據(jù)建造者的定義,表相即是回調(diào),也就是說(shuō)獲取數(shù)據(jù)以后如何顯示和處理取決于回調(diào)函數(shù),相應(yīng)地回調(diào)函數(shù)在處理數(shù)據(jù)的時(shí)候不需要關(guān)注是如何獲取數(shù)據(jù)的,同樣的例子也可以在jquery的ajax方法里看到,有很多回調(diào)函數(shù)(比如success, error回調(diào)等),主要目的就是職責(zé)分離。

同樣再來(lái)一個(gè)jQuery的例子:

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

$('<div class= "foo"> bar </div>');

我們只需要傳入要生成的HTML字符,而不需要關(guān)系具體的HTML對(duì)象是如何生產(chǎn)的。

總結(jié)

建造者模式主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”,在這其中“分步驟”是一個(gè)穩(wěn)定的算法,而復(fù)雜對(duì)象的各個(gè)部分則經(jīng)常變化,其優(yōu)點(diǎn)是:建造者模式的“加工工藝”是暴露的,這樣使得建造者模式更加靈活,并且建造者模式解耦了組裝過(guò)程和創(chuàng)建具體部件,使得我們不用去關(guān)心每個(gè)部件是如何組裝的。

相關(guān)文章

  • Ajax跨域?qū)崿F(xiàn)代碼(后臺(tái)jsp)

    Ajax跨域?qū)崿F(xiàn)代碼(后臺(tái)jsp)

    這篇文章主要介紹了Ajax跨域?qū)崿F(xiàn)代碼(后臺(tái)jsp),需要的朋友可以參考下
    2017-01-01
  • 原生Javascript實(shí)現(xiàn)繼承方式及其優(yōu)缺點(diǎn)詳解

    原生Javascript實(shí)現(xiàn)繼承方式及其優(yōu)缺點(diǎn)詳解

    JS作為面向?qū)ο蟮娜躅愋驼Z(yǔ)言,繼承也是其非常強(qiáng)大的特性之一,那么這篇文章主要給大家介紹了關(guān)于原生Javascript實(shí)現(xiàn)繼承方式及其優(yōu)缺點(diǎn)的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 基于JavaScript實(shí)現(xiàn)彈幕特效

    基于JavaScript實(shí)現(xiàn)彈幕特效

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)彈幕特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Javascript模塊導(dǎo)入導(dǎo)出詳解

    Javascript模塊導(dǎo)入導(dǎo)出詳解

    這篇文章主要介紹了Javascript模塊導(dǎo)入導(dǎo)出詳解的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 前端強(qiáng)制刷新、清空緩存各種方法總結(jié)

    前端強(qiáng)制刷新、清空緩存各種方法總結(jié)

    這篇文章主要介紹了在遇到數(shù)據(jù)或邏輯未成功更新問(wèn)題時(shí),如何通過(guò)刷新頁(yè)面、設(shè)置、清除緩存等方法進(jìn)行解決,文中通過(guò)圖文將各種情況下清空緩存的方案介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • JavaScript實(shí)現(xiàn)五種不同煙花特效

    JavaScript實(shí)現(xiàn)五種不同煙花特效

    這篇文章主要給大家?guī)?lái)五個(gè)好看的基于 HTML+CSS+JS 的煙花特效,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定的幫助,需要的可以參考一下
    2022-01-01
  • 微信支付如何實(shí)現(xiàn)內(nèi)置瀏覽器的H5頁(yè)面支付

    微信支付如何實(shí)現(xiàn)內(nèi)置瀏覽器的H5頁(yè)面支付

    這篇文章主要介紹了微信支付如何實(shí)現(xiàn)內(nèi)置瀏覽器的H5頁(yè)面支付的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • 使用Webpack打包的流程分析

    使用Webpack打包的流程分析

    Webpack 是一個(gè)前端資源加載/打包工具。它將根據(jù)模塊的依賴關(guān)系進(jìn)行靜態(tài)分析,然后將這些模塊按照指定的規(guī)則生成對(duì)應(yīng)的靜態(tài)資源,這篇文章主要介紹了使用Webpack打包的操作方法,需要的朋友可以參考下
    2022-12-12
  • JS實(shí)現(xiàn)div居中示例

    JS實(shí)現(xiàn)div居中示例

    div居中的方法有很多,網(wǎng)上可以找得到,但是本文要介紹的是使用JS實(shí)現(xiàn)的,比較另類,大家不妨參考下
    2014-04-04
  • 一文詳解MySQL5.7與MySQL8之間的區(qū)別

    一文詳解MySQL5.7與MySQL8之間的區(qū)別

    MySQL作為最常用的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,一直在不斷發(fā)展和改進(jìn),其中,MySQL 5.7和MySQL 8是兩個(gè)備受關(guān)注的版本,它們之間存在一些關(guān)鍵的差異,本文將深入探討這兩個(gè)版本之間的主要差異,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

乌兰察布市| 韩城市| 望城县| 长岛县| 顺平县| 任丘市| 太原市| 嘉义县| 乌鲁木齐市| 浮梁县| 陈巴尔虎旗| 布拖县| 县级市| 太康县| 醴陵市| 镇赉县| 孙吴县| 沭阳县| 吉木乃县| 阳泉市| 宁强县| 娄底市| 肇源县| 屏东县| 青岛市| 游戏| 雅安市| 农安县| 美姑县| 锡林郭勒盟| 山丹县| 长沙县| 永昌县| 黄冈市| 青河县| 云梦县| 金塔县| 大连市| 驻马店市| 朝阳市| 黄山市|