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