如何将不同的数据结构整合为一个?任何设计模式或经验?
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
而不是具体的底层类型),除了确定哪个初始化阶段之外,您无需更改任何内容您将首先拥有的数据类型。
如您所知,不同的供应商可能有不同的数据字段名称。虽然名称不同,但数据结构几乎相同。 例如,
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
而不是具体的底层类型),除了确定哪个初始化阶段之外,您无需更改任何内容您将首先拥有的数据类型。