前言
桥接模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。
桥接模式
应用场景:一个产品有多个维度的变化时,这个时候组合的效果高于继承时,可以将多个维度抽离出来,让不同的维度抽象成不同的功能,并且这样的功能还能够独自扩展,最终通过借用的方式组合它们到一起,从而达到抽象与实现解耦的目的。
理解:类、对象的结构和使用解耦,可以通过借用的方式,任意的切换功能,只要组织好结构即可。功能类可以自己独立扩展,比如爱情的滋味应该也有很多种,酸甜苦辣咸等等等。然后产品也能有很多种,比如不同的性别除了男人和女人,还可以是别的性别,哈哈哈,人类似乎有56种性别嘞。和建造者模式不同的是,它不是用于创建对象,而是用特定的结构来扩展功能,并让抽象和具体的实现解耦。比如 约会 与 爱情的感受、性别 与 不同性别的人。都是通过特定的结构组织方式来完成的。
namespace struct_mode_01 {
// 约会
interface IDating {
say(): string
}
// 功能类
class GoodLove implements IDating {
say(): string {
return '【甜的爱情】留在你身边,陪你。人间相伴,共赴天涯海角。'
}
}
class BadLove implements IDating {
say(): string {
return "【变质的爱情】太差了,有机会换一个吧。分手前得搞点实惠的,那房子不错。"
}
}
// 性别
interface IGender {
setFeel(feel: IDating): IGender
love(): IGender
}
// 产品类
class Man implements IGender {
private feel: IDating
constructor(feel: IDating) {
this.feel = feel
}
setFeel(feel: IDating): IGender {
this.feel = feel
return this
}
love(): IGender {
console.log(`男人觉得:${this.feel.say()}`)
return this
}
}
class Woman implements IGender {
private feel: IDating
constructor(feel: IDating) {
this.feel = feel
}
setFeel(feel: IDating): IGender {
this.feel = feel
return this
}
love(): IGender {
console.log(`女人觉得:${this.feel.say()}`)
return this
}
}
new Man(new GoodLove()).love().setFeel(new BadLove()).love()
new Woman(new GoodLove()).love().setFeel(new BadLove()).love()
}