橋接模式
將抽象部分與其它的實現部分分離轩触,這樣抽象化與實現化解耦,使它們可以獨立的變化.應用場景是實現系統(tǒng)可能有多個角度分類,每一個角度都可能變化.橋方可以通過實現橋接口進行單方面擴展,而另一方可以繼承抽象類而單方面擴展,而之間的調用就從橋接口來作為突破口异赫,不會受到雙方拓展的任何影響.
-
圖例
- 代碼示例
class Shape{
constructor(bridge){
this.bridge=bridge
}
render(){
console.log(`創(chuàng)建${this.bridge.setColor()}的${this.draw()}`)
}
draw(){
throw new Error('子類必須調用此方法')
}
}
class Rect extends Shape{
draw(){
return '正方形'
}
}
class Circle extends Shape{
draw(){
return '圓形'
}
}
class Color{
setColor(){
throw new Error('子類必須調用此方法')
}
}
class Red extends Color{
setColor(){
return '紅色'
}
}
class Green extends Color{
setColor(){
return '綠色'
}
}
let red=new Red();
let green=new Green();
let shape=new Circle(red)
let shape1=new Rect(green)
shape.render() //創(chuàng)建紅色的圓形
shape1.render() //創(chuàng)建綠色的正方形
- 應用場景
1.jquery的each
let each=function(arr,fn){
for(let i=0;i<arr.length;i++){
let val=arr[i]
if(fn.call(val,i,val,arr)){
return false
}
}
}
let arr=[1,2,3,4]
each(arr,function(i,v,arr){
arr[i]=v*2
})
優(yōu)點 |
---|
把抽象與實現隔離開,實現松耦合. |