javascript --- 設計模式之創造者模式

  軟件系統中,有時候面臨着「一個複雜對象」的建立工做,其一般由各個部分的子對象用必定的算法構成;因爲需求的變化,這個複雜對象的各個部分常常面臨着劇烈的變化,可是將它們組合在一塊兒的算法確相對穩定。如何應對這種變化?如何提供一種「封裝機制」來隔離出「複雜對象的各個部分」的變化,從而保持系統中的「穩定構建算法」不隨着需求改變而改變?這就是要說的建造者模式。jquery

  建造者模式能夠將一個複雜對象的構建與其表示相分離,使得一樣的構建過程能夠建立不一樣的表示。也就是說若是咱們用了建造者模式,那麼用戶就須要指定須要建造的類型就能夠獲得它們,而具體建造的過程和細節就不須要知道了。ajax

這個模式相對來講比較簡單,先上代碼,而後再解釋算法

function getBeerById(id, callback) {
    // 使用ID來請求數據,而後返回數據.
    asyncRequest('GET', 'beer.uri?id=' + id, function (resp) {
        // callback調用 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);
    });
}

根據建造者的定義,表相便是回調,也就是說獲取數據之後如何顯示和處理取決於回調函數,相應地回調函數在處理數據的時候不須要關注是如何獲取數據的,一樣的例子也能夠在jquery的ajax方法裏看到,有不少回調函(好比success, error回調等),主要目的就是職責分離async

一樣來一個jQuery的例子函數

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

咱們只須要傳入要生成的HTML字符,而不須要關係具體的HTML對象是如何生產的。this

建造者模式主要用於「分步驟構建一個複雜的對象」,在這其中「分步驟」是一個穩定的算法,而複雜對象的各個部分則常常變化,其優勢是:建造者模式的「加工工藝」是暴露的,這樣使得建造者模式更加靈活,而且建造者模式解耦了組裝過程和建立具體部件,使得咱們不用去關心每一個部件是如何組裝的。spa

相關文章
相關標籤/搜索