设计模式的理解: 适配器模式 Adapter

     适配器模式,是为了转变接口方式的一种模式。即通过一个中介,作为两个不兼容接口之间的桥梁(老接口与新接口),使原先的老对象不仅可以使用自身的老接口,而且还可以通过适配器类,用新接口对老对象进行操作。

实现方式如下:

所谓的Target接口就是用户所希望使用的新接口,Adaptee 就是我们原先的老对象。而Adapter 为适配器。上图表示适配器类实现了目标接口Target,它还包含了Adaptee对象,以方便在新接口中调用子对象子对象Adaptee的方法。

例如,对于电子设备来讲,必须输入标准电压和频率才可以正常运转。然而每个国家的标准并不一样,例如英国的标准电压使230V ,而中国的标准电压是220V。怎么样让英国的标准电器设备能在中国良好的工作,这中间就需要一个“中介”,让输入到新接口的电压是220V,经过处理后,原先的老对象接收到的230V。又例如,电器接收的是电信号,而声控电器输入的是声音信号,声音信号变成电信号的过程中就需要依赖适配器。

适配器模式示例如下:

//声音信号接收器的接口
class ISoundSignalReceiver{
public :
    void receiver(SoundSignal s)=0;
}
//电器设备抽象类
class Electrical{
public:
    void work(ElectricalSignal e)=0;
}

//电器设备能够接收声音信号的适配器类
class Adapter :public ISoundSignalReceiver{
private:
    Electrical * electrical;
protected:
    virtual ElectricalSignal   SoundToElectrical(SoundSignal s){
        // 声音信号转电信号的函数(可重载)
            ......
    }

public:
    Adapter(Electrical & el){ electrical=el; }

    //实现新的接口
    void receiver(SoundSignal s){
        ElectricalSignal   eSignal =  SoundToElectrical(s);
        electrical->work(eSignal );
    }
}

实现具体的抽象类,和使用示例

//电灯
class Lamp:public Electrical{
public:
    void work(ElectricalSignal e){
        // .. 发热发光..
    }
}

//电扇
class Fan:public Electrical{
public:
    void work(ElectricalSignal e){
        // .. 转动..
    }
}


//使用示例
void mainProcess(SoundSignal  soundSignal ){
    Lamp lamp; //电灯
    Fan  fan ; //电扇
    //声控电灯
    Adapter soundlamp(lamp); 
    soundlamp.receiver(soundSignal);
    //声控电扇
    Adapter soundFan(fan); 
    soundFan.receiver(soundSignal);
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值