美文网首页
《设计模式》之适配器模式

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

作者: 魅猫之 | 来源:发表于2020-06-13 15:11 被阅读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信号 
    

    相关文章

      网友评论

          本文标题:《设计模式》之适配器模式

          本文链接:https://www.haomeiwen.com/subject/gagatktx.html