如何将不同的数据结构整合为一个?任何设计模式或经验?

How to integrate different data struct into one ? Any design pattern or exprience?

如您所知,不同的供应商可能有不同的数据字段名称。虽然名称不同,但数据结构几乎相同。 例如,

struct s1 {
    int s1Price,
    int s1Volume
};


struct s2 {
    int s2Price,
    int s2Volume
};

像股市数据一样,数据会自动发送给程序,程序只是接收数据然后处理它。

我想设计一个可以轻松更改为其他供应商的数据结构的程序。

如果我用 s1 开发程序,稍后,我想更改为 s2,变化最小。

希望你能明白我的意思。

你能给我什么建议吗?任何设计模式或您的经验?

这里的关键字是抽象

这是一种方法:

#include <iostream>

struct s1 {
  int s1Price;
  int s1Volume;
};


struct s2 {
  int s2Price;
  int s2Volume;
};

class   Idata
{
public:
  virtual ~Idata() {}

public:
  virtual int   getPrice() = 0;
  virtual int   getVolume() = 0;
};

class s1Data : public Idata, public s1 {
public:
  s1Data(const s1& S1) : s1(S1) {}

  virtual int   getPrice() {
    return s1Price;
  }

  virtual int   getVolume() {
    return s1Volume;
  }
};

class s2Data : public Idata, public s2 {
public:
  s2Data(const s2& S2) : s2(S2) {}

  virtual int   getPrice() {
    return s2Price;
  }

  virtual int   getVolume() {
    return s2Volume;
  }
};


void    my_func_that_will_never_change_because_it_uses_abstraction(Idata *data)
{
  std::cout << data->getPrice() << std::endl;
  std::cout << data->getVolume() << std::endl;
}

int     main(void)
{
  s1    Sfirst{42, 21};
  s2    Ssecond{99, 88};

  s1Data        DataFirst(Sfirst);
  s2Data        DataSecond(Ssecond);

  my_func_that_will_never_change_because_it_uses_abstraction(&DataFirst);
  my_func_that_will_never_change_because_it_uses_abstraction(&DataSecond);
}

以相同的方式对所有程序进行编码 my_func_that_will_never_change_because_it_uses_abstraction 编码(通过使用接口 IData 而不是具体的底层类型),除了确定哪个初始化阶段之外,您无需更改任何内容您将首先拥有的数据类型。