# 设计模式系列--适配器模式

# 什么适配器

比如家里有个遥控器,可以安装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号电池
}

* 转载请注明出处