【问题标题】:Problem with implementation of Adapter Pattern适配器模式的实现问题
【发布时间】:2020-06-12 18:32:35
【问题描述】:

我有一个问题 - 如何在以下示例中使用适配器模式将第一个接口“转换”为另一个接口?如果第二个接口使用附加参数,我不能使用这个参数,如果适配器继承自第一个接口(它只有一个参数)。我该怎么办?

#include <iostream>

class IFirstClass
{
public:
    virtual void perform(std::string name) = 0;
};

class ISecondClass
{
public:
    virtual void furtherPerform(std::string name, std::string desc) = 0;
};

class FirstClass : public IFirstClass
{
public:
    virtual void perform(std::string name)
    {
        std::cout << "Performing action: " << name << "\n";
    }
};

class SecondClass : public ISecondClass
{
public:
    virtual void furtherPerform(std::string name, std::string desc)
    {
        std::cout << "Performing action: " << name << " with description: " << desc << "\n";
    }
};

class Adapter : public IFirstClass
{
private:
    SecondClass& derived;
public:
    Adapter(SecondClass& derived) : derived{ derived }
    {

    }
    virtual void perform(std::string name)
    {
        derived.furtherPerform(name, ? );
    }
};
int main()
{
    FirstClass a;
    SecondClass b;
    Adapter c(b);
    c.perform("Name", "Description");
}

【问题讨论】:

    标签: c++ adapter


    【解决方案1】:

    您试图在 interface1 和 interface2 之间放置一个适配器,以便您可以通过适配器使用 interface2。

    你必须决定如何处理你需要适应的方法,需要比接口2更多的参数。

    一种解决方案可能是始终使用已知值作为参数(空字符串、经过验证的字符串等)。

    另一种解决方案可能是将该字符串传递给适配器构造函数

    另一种解决方案可能是在每次需要确定该值时询问一个函数。

    这真的取决于你需要适应什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2015-10-19
      相关资源
      最近更新 更多