这是一个适配器模式的习题:35mm接口及25mm接口;USB Type-c接口;lighting接口。用类模式实现耳机接口的转接。用C++给出代码。并给出类图
类图如下:

代码如下:
#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 著作权归作者所有。请勿转载和采集!