什么是可插拔适配器设计模式?

时间:2014-11-30 07:05:11

标签: design-patterns

我是c ++开发人员,并尝试了解设计模式。在结构模式中有一个特定的模式称为适配器模式。我如何从GOF书中理解这个模式。在这种模式中,有可插拔的适配器模式,这非常令人困惑,无法理解。谷歌搜索很多,但无法找到满意的答案。任何人都可以解释什么是可插拔的适配器设计模式,用c ++示例?以及正常适配器模式和可插拔适配器模式之间的区别。 提前致谢

2 个答案:

答案 0 :(得分:0)

请检查此问题的答案是否令您满意。我认为无法更好地解释可插拔:Can anybody explain the concept of pluggable adapter to me with good example?

答案 1 :(得分:0)

以下示例符合以下条件:

  

适配器应该支持适应者(不相关且具有   不同的接口)使用相同的旧目标接口   客户端。

此示例使用C ++ 11 lambda实现与委托相同的功能。

  #include <iostream>
  #include <functional>

  //Adaptee 1
  struct CoffeMaker {
    void Brew (double quantity, double temp) const{
     std::cout << "I am brewing " << quantity <<"ml coffee @" << temp <<" degree C" <<std::endl; 
   }
  };

  //Adaptee 2 (having difference interface from Adaptee 2)
  struct  JuiceMaker{
    void Squeeze (double quantity) const{
      std::cout << "I am making " << quantity <<"ml Juice" <<std::endl; 
   }
  };

  // Target
  struct Beverage{
    virtual void getBeverage (int quantity) = 0;
  };

  // Adapter
  class Adapter : public Beverage{
    std::function<void(int)> Request;

  public:
    Adapter(CoffeMaker *cm1){
      Request = [cm1](int quantity){
        cm1->Brew(quantity,80);
      };
      delete cm1;
    }

    Adapter(JuiceMaker *jm1){
      Request = [jm1](int quantity){
        jm1->Squeeze(quantity);
      };
      delete jm1;
    }

    void getBeverage(int quantity){
      Request(quantity);
    }
  };

  //Client
  int main(){
    Adapter adp1(new CoffeMaker());
    adp1.getBeverage(30);

    Adapter adp2(new JuiceMaker());
    adp2.getBeverage(40);

  }

虽然此示例基于此article,但我在其可插入适配器示例中有一些异议