# 设计模式系列--适配器模式
# 什么适配器
比如家里有个遥控器,可以安装5号和7号电池,假如5号电池没电了,下次遥控器开启时就直接使用7号电池了,不至于让遥控器不能使用,这个选择的过程可以称之为适配过程,这就是适配器
# 适配器模式实现
class Battery {
virtual ~Battery() = default;
virtual void print() = 0;
virtual bool hasPower() = 0;
}
class BatteryFive : public Battery{
void print() override {
std::cout << "this is Battery of Five" << std::endl;
}
// 模拟切换电池
bool hasPower() override {return false;}
}
class BatterySeven: public Battery{
void print() override {
std::cout << "this is Battery of Seven" << std::endl;
}
// 模拟切换电池
bool hasPower() override {return true;}
}
// 适配器隐藏了使用细节
class Adapter {
public:
Adapter() {
// 检查5号电池
auto battery_ = std::make_shared<BatteryFive>();
if(battery_.hasPower()) {
return;
}
auto battery_ = std::make_shared<BatterySeven>();
}
bool hasPower(){
if(battery_ == nullptr) return false;
return battery_->hasPower();
}
private:
std::shared_ptr<Battery> battery_;
}
// 客户端调用
class Client{
public:
Client() {
adapter_ = std::make_shared_<Adapter>();
}
void Play() {
if(!adapter.hasPower()){
// No Power can't play
return;
}
// Playing!.
}
private:
std::shared_ptr<Adapter> adapter_;
}
int main() {
Client client;
client.Play(); // 并不关心是使用的是7号电池还是5号电池
}
* 转载请注明出处