《設(shè)計模式》之適配器模式

定義:

適配器模式(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信號 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容