类图如下:

adapter_pattern_class_diagram

代码如下:

#include <iostream>

// Target interface
class Headphone {
public:
    virtual void playMusic() = 0;
    virtual ~Headphone() {}
};

// Adaptee interface
class AudioJack {
public:
    virtual void playAudio() = 0;
    virtual ~AudioJack() {}
};

// Adaptee 1: 3.5mm audio jack
class AudioJack3_5mm : public AudioJack {
public:
    void playAudio() override {
        std::cout << "Playing audio through 3.5mm audio jack" << std::endl;
    }
};

// Adaptee 2: 2.5mm audio jack
class AudioJack2_5mm : public AudioJack {
public:
    void playAudio() override {
        std::cout << "Playing audio through 2.5mm audio jack" << std::endl;
    }
};

// Adaptee 3: USB Type-C audio jack
class AudioJackTypeC : public AudioJack {
public:
    void playAudio() override {
        std::cout << "Playing audio through USB Type-C audio jack" << std::endl;
    }
};

// Adaptee 4: Lighting audio jack
class AudioJackLighting : public AudioJack {
public:
    void playAudio() override {
        std::cout << "Playing audio through Lighting audio jack" << std::endl;
    }
};

// Adapter
class AudioJackAdapter : public Headphone {
public:
    AudioJackAdapter(AudioJack* audioJack) : m_audioJack(audioJack) {}
    void playMusic() override {
        m_audioJack->playAudio();
    }
private:
    AudioJack* m_audioJack;
};

int main() {
    // Use 3.5mm audio jack
    AudioJack3_5mm audioJack3_5mm;
    Headphone* headphone3_5mm = new AudioJackAdapter(&audioJack3_5mm);
    headphone3_5mm->playMusic();
    delete headphone3_5mm;

    // Use 2.5mm audio jack
    AudioJack2_5mm audioJack2_5mm;
    Headphone* headphone2_5mm = new AudioJackAdapter(&audioJack2_5mm);
    headphone2_5mm->playMusic();
    delete headphone2_5mm;

    // Use USB Type-C audio jack
    AudioJackTypeC audioJackTypeC;
    Headphone* headphoneTypeC = new AudioJackAdapter(&audioJackTypeC);
    headphoneTypeC->playMusic();
    delete headphoneTypeC;

    // Use Lighting audio jack
    AudioJackLighting audioJackLighting;
    Headphone* headphoneLighting = new AudioJackAdapter(&audioJackLighting);
    headphoneLighting->playMusic();
    delete headphoneLighting;

    return 0;
}
``

原文地址: https://www.cveoy.top/t/topic/hjki 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录