定義:
適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個獨立接口的功能。
適配器模式在生活中很常見,比如蘋果電腦的充電器,在不同的國家有不同的標(biāo)準(zhǔn),在中國大陸跟香港的標(biāo)準(zhǔn)就不一樣,很多直接在香港帶回來的電腦,充電需要使用轉(zhuǎn)接頭,不然插不上;
還有最常見的顯示器轉(zhuǎn)接頭,HDMI轉(zhuǎn)VGA,DVI轉(zhuǎn)VGA,各種互轉(zhuǎn)
簡單的來說就是通過加入中間層來解決兼容性問題
代碼:
// 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轉(zhuǎn)VGA適配器
class HDMI2VGAAdapter implements IVGADisplay {
public hdmi: IHDMIDisplay
public constructor(hdmi: IHDMIDisplay) {
this.hdmi = hdmi
}
public vgaDisplay() {
console.log(this.hdmi.HDMIOutput())
console.log('轉(zhuǎn)換HDMI信號...')
console.log('輸出VGA信號')
}
}
// DVI轉(zhuǎn)VGA適配器
class DVI2VGAAdapter implements IVGADisplay {
public dvi: IDVIDisplay
public constructor(dvi: IDVIDisplay) {
this.dvi = dvi
}
public vgaDisplay() {
console.log(this.dvi.DVIOutput())
console.log('轉(zhuǎn)換DVI信號...')
console.log('輸出VGA信號')
}
}
// 使用HDMI轉(zhuǎn)VGA適配器對MacBook進行轉(zhuǎn)接
const h2vAdapter = new HDMI2VGAAdapter(new Macbook())
let projection = new VGAProjection(h2vAdapter)
projection.vgaDisplay()
// 使用DVI轉(zhuǎn)VGA適配器對PC進行轉(zhuǎn)接
const d2vAdapter = new DVI2VGAAdapter(new PC())
projection = new VGAProjection(d2vAdapter)
projection.vgaDisplay()
輸出結(jié)果:
[LOG]: HDMI輸出
[LOG]: 轉(zhuǎn)換HDMI信號...
[LOG]: 輸出VGA信號
[LOG]: DVI輸出
[LOG]: 轉(zhuǎn)換DVI信號...
[LOG]: 輸出VGA信號