[设计模式]桥接模式
橋接模式可以把抽象類和實(shí)現(xiàn)類進(jìn)行各自封裝和擴(kuò)展,目的在于解耦。
由于橋接模式可以增強(qiáng)了組合性,我們可以很靈活地修改類,并且很好地重用。
我們可以先看一下簡單的片斷:
//先獲取DOM
var DomA = document.getElementById('divA');
//給DomA綁定事件
DomA.addEventListener('click',funcA,false);
//定義funcA
function funcA(){
var id = this.id;
alert("I'm HTMLElement, My ID is:" + id);
}
以上的例子很簡單,就是把一個(gè)DOM綁定了click事件,執(zhí)行一個(gè)含有alert()的函數(shù)。
很明顯,funcA能做的事只有兩件:
1、獲得元素的ID。
2、顯示I'm HTMLElement, My ID is: divA。
funcA就是所謂的“寫死”了,也就是強(qiáng)耦合,里面的alert()永遠(yuǎn)只是服務(wù)于funcA,大大失去了靈活性。
現(xiàn)在我們用橋接模式的思想,把funcA拆分,解耦。
//先獲取DOM
var DomA = document.getElementById('divA');
//給DomA綁定事件
DomA.addEventListener('click',funcA,false);
//這里把上例的funcA進(jìn)行拆分出一個(gè)funcAlert
function funcAlert(txt,id){
alert(txt+id);
}
//定義funcA
function funcA(){
var id = this.id;
//橋接funcAlert函數(shù)
funcAlert("I'm HTMLElement ,My ID is:",id);
}
好了,以后funcAlert()就可以作用于其他函數(shù),只要給funcALert(),傳入?yún)?shù)即可。
當(dāng)然,本例只是為了演示而做了一個(gè)比較簡單的拆分。er......看起來有點(diǎn)無謂。
不管如何,只是表達(dá)了橋接的思想。
其實(shí)就是把多個(gè)功能盡量拆分,解耦,做到可重用,然后在使用時(shí),再拼裝起來。將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立變化,重用。就這是橋接模式的思想。
還記得我在分享單體模式嗎?里面有一個(gè)這樣的片斷:
var XZB = (function(){var G = 10;
var Return = {
getG:function(){
return G;
},
setG:function(g){
G = g;
}
}
return Return;
})();
其實(shí)里面的Return也是一種解耦,只不過他的耦合度相對低一點(diǎn)而已。
里面的Return可以設(shè)定有N種方法來實(shí)現(xiàn)N種功能,只不過他們都只局限于操作里面的私有變量。
OK,講完了橋裝模式,我們來講講他的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
降低抽象層和具體實(shí)現(xiàn)之間的耦合,使各層獨(dú)立出來管理。橋接模式成了各層的粘合劑。
缺點(diǎn):
因?yàn)槊總€(gè)橋接都會(huì)調(diào)用外層的函數(shù),這就需要往上搜索變量,會(huì)有性能上的影響。
還有一點(diǎn),如果被橋接的函數(shù)只是在于橋接函數(shù)里面調(diào)用,而再也沒被其他函數(shù)調(diào)用,這時(shí)就沒必要橋接了。
?
寫在最后,看完這個(gè)橋接模式之后,有沒發(fā)現(xiàn)和我之前寫的工廠模式有點(diǎn)相似,難道工廠模式就只是多了判斷,然后選擇性調(diào)用嗎?
er...我也說不清,總言之,我覺得設(shè)計(jì)模式只是實(shí)現(xiàn)功能的代碼寫法,也并不是說什么功能就應(yīng)該用什么模式,靈活運(yùn)用才是王道。
轉(zhuǎn)載于:https://www.cnblogs.com/zzbo/archive/2012/02/14/2350823.html
總結(jié)
以上是生活随笔為你收集整理的[设计模式]桥接模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle使用sqlplus查询sql
- 下一篇: Asp.Net+Jquery.Ajax详