《设计模式》之适配器模式
2020-06-13 本文已影响0人
魅猫之
定义:
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
适配器模式在生活中很常见,比如苹果电脑的充电器,在不同的国家有不同的标准,在中国大陆跟香港的标准就不一样,很多直接在香港带回来的电脑,充电需要使用转接头,不然插不上;
还有最常见的显示器转接头,HDMI转VGA,DVI转VGA,各种互转
简单的来说就是通过加入中间层来解决兼容性问题
代码:
// VGA接入的接口
interface IVGADisplay {
vgaDisplay: () => void,
}
// 一个只能接入VGA接口信号的投影仪
class VGAProjection implements IVGADisplay {
public input: IVGADisplay
public constructor(input: IVGADisplay) {
this.input = input
}
public vgaDisplay() {
this.input.vgaDisplay()
}
}
// HDMI输出接口
interface IHDMIDisplay {
HDMIOutput: () => void,
}
// 一台只有HDMI接口的MacBook
class Macbook implements IHDMIDisplay {
public HDMIOutput() {
return 'HDMI输出'
}
}
// DVI输出接口
interface IDVIDisplay {
DVIOutput: () => void,
}
// 一台只有DVI接口的台式电脑
class PC implements IDVIDisplay {
public DVIOutput() {
return 'DVI输出'
}
}
// HDMI转VGA适配器
class HDMI2VGAAdapter implements IVGADisplay {
public hdmi: IHDMIDisplay
public constructor(hdmi: IHDMIDisplay) {
this.hdmi = hdmi
}
public vgaDisplay() {
console.log(this.hdmi.HDMIOutput())
console.log('转换HDMI信号...')
console.log('输出VGA信号')
}
}
// DVI转VGA适配器
class DVI2VGAAdapter implements IVGADisplay {
public dvi: IDVIDisplay
public constructor(dvi: IDVIDisplay) {
this.dvi = dvi
}
public vgaDisplay() {
console.log(this.dvi.DVIOutput())
console.log('转换DVI信号...')
console.log('输出VGA信号')
}
}
// 使用HDMI转VGA适配器对MacBook进行转接
const h2vAdapter = new HDMI2VGAAdapter(new Macbook())
let projection = new VGAProjection(h2vAdapter)
projection.vgaDisplay()
// 使用DVI转VGA适配器对PC进行转接
const d2vAdapter = new DVI2VGAAdapter(new PC())
projection = new VGAProjection(d2vAdapter)
projection.vgaDisplay()
输出结果:
[LOG]: HDMI输出
[LOG]: 转换HDMI信号...
[LOG]: 输出VGA信号
[LOG]: DVI输出
[LOG]: 转换DVI信号...
[LOG]: 输出VGA信号