什么是桥接模式?
是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.
意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
桥接模式式有哪些使用场景?
这平时开发的时候是比较常用的一种设计模式,有时候你甚至不经意间就使用了桥接模式,例如一些功能开发,我们总是把一些特性抽离出来,然后在拼装在一起使用
主要解决
在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
桥接模式优缺点有哪些?
优点
1、抽象和实现的分离。
2、优秀的扩展能力。
3、实现细节对客户透明。
缺点
抽象太多,可能造成代码很难理解。
JS 如何实现*桥接模式?
比如鸟和狗,他们有共同的特性,比如都会说话speak,和跑run,鸟会飞fly。
上面这些行为可以理解为抽象的一些功能。实现部分是我们通过这些行为组装成鸟和狗
class Speak {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " speaking")
}
}
class Run {
constructor(name) {
this.name = name;
}
run() {
console.log(this.name + " running")
}
}
class Fly {
constructor(name) {
this.name = name;
}
fly() {
console.log(this.name + " fly")
}
}
class Animal {
constructor(name) {
this.name = name
}
}
class Dog extends Animal {
constructor(name) {
super(name)
}
speak() {
const action = new Speak(this.name)
action.speak()
}
run() {
const action = new Run(this.name)
action.run()
}
}
class Bird extends Animal {
constructor(name) {
super(name)
}
speak() {
const action = new Speak(this.name)
action.speak()
}
run() {
const action = new Run(this.name)
action.run()
}
fly() {
const action = new Fly(this.name)
action.fly()
}
}
const bird = new Bird("小黄鹂")
bird.speak()
const dog = new Dog("大黄")
dog.run();
结果
其实一些共性的功能可以用继承,但是有些场景使用继承导致扩展性不强,就可以使用桥接。其实最简单理解为对函数或者对象进行抽象的封。装。