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

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

本文关键字:一个 任何 经验 设计模式 集成 数据结构      更新时间:2023-10-16

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

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而不是具体的底层类型),除了初始化阶段之外,您将没有什么可更改的,初始化阶段决定您将首先拥有哪种类型的数据。

相关文章: