桥接模式

  • 将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化
  • 应用场景:实现系统可能有多个角度分类,每一种角度都可能变化
  • 桥接双方可以通过实现桥接口进行单方面扩展,也可以继续抽象类而单方面扩展,而之间的调用就从桥接口来作为突破口,不会受到双方扩展的任何影响
class A{
  constructor(bridge){
    this.bridge = bridge;
  }
  go(){
    console.log(`从${this.from()}到${this.bridge.to()}`);
  }
  from(){
    throw new Error('子类必须实现此方法')
  }
}
class A1 extends A{
  from(){return 'A1'}
}
class A2 extends A{
  from(){return 'A2'}
}
class B{
  to(){
    throw new Error('子类必须实现此方法')
  }
}
class B1 extends B{
  from(){return 'B1'}
}
class B2 extends B{
  from(){return 'B2'}
}
let b2 = new B2();
let a1 = new A1(b2);
a1.go();

应用场景

//绘制一个小球 将定位和绘制颜色分开,利用Circle作为桥,传递数据
function Position(x,y){
  this.x = x;
  this.y = y;
}
function CircleColor(color){
  this.color = color;
}
function Circle(x,y,circleColor){
  this.position = new Position(x,y);
  this.circleColor = new CircleColor(circleColor);
}
Circle.prototype.render=function(){
  let canvas = document.getElementById('canvas');
  let ctx = canvas.getContext('2d');
  ctx.beginPath();
  ctx.arc(this.position.x,this.position.y,100,0,2*Math.PI);
  ctx.fillStyle = this.circleColor.color;
  ctx.fill();
}
let c = new Circle(100,100,'red');
c.render();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值