建造者可以將一個復雜對象的構建與其表示相分離,使得同樣的構建過程可以創(chuàng)建不同的表示衩辟。也就是說如果我們用了建造者模式螟炫,那么用戶就需要指定需要建造的類型就可以得到它們,而具體建造的過程和細節(jié)就不需要知道了艺晴。即用回調來實現(xiàn):
functionget ?BeerById(id, callback) {
//使用ID來請求數(shù)據(jù)昼钻,然后返回數(shù)據(jù).
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);
});
}
根據(jù)建造者的定義,表相即是回調封寞,也就是說獲取數(shù)據(jù)以后如何顯示和處理取決于回調函數(shù)换吧,相應地回調函數(shù)在處理數(shù)據(jù)的時候不需要關注是如何獲取數(shù)據(jù)的,同樣的例子也可以在jquery的ajax方法里看到钥星,有很多回調函數(shù)(比如success, error回調等)沾瓦,主要目的就是職責分離。
總結:建造者模式主要用于“分步驟構建一個復雜的對象”,在這其中“分步驟”是一個穩(wěn)定的算法贯莺,而復雜對象的各個部分則經(jīng)常變化风喇,其優(yōu)點是:建造者模式的“加工工藝”是暴露的,這樣使得建造者模式更加靈活缕探,并且建造者模式解耦了組裝過程和創(chuàng)建具體部件魂莫,使得我們不用去關心每個部件是如何組裝的。