桥接模式
将抽象部分与其它的实现部分分离,这样抽象化与实现化解耦,使它们可以独立的变化.应用场景是实现系统可能有多个角度分类,每一个角度都可能变化.桥方可以通过实现桥接口进行单方面扩展,而另一方可以继承抽象类而单方面扩展,而之间的调用就从桥接口来作为突破口,不会受到双方拓展的任何影响.
-
图例
- 代码示例
class Shape{
constructor(bridge){
this.bridge=bridge
}
render(){
console.log(`创建${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() //创建红色的圆形
shape1.render() //创建绿色的正方形
- 应用场景
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
})
优点 |
---|
把抽象与实现隔离开,实现松耦合. |