《设计模式》之适配器模式

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信号 
上一篇 下一篇

猜你喜欢

热点阅读