我想得到一些指向以下设计问题的建议。
假设我想编写一些类来枚举USB设备并选择特定设备并通过它为不同平台传输数据。(这只是一个非常基本的场景。设计问题比USB相关更多)。
现在我想拥有一个USB设备的设备基类,它可以具有基于字符串等的enumerate_devices,get_particular_device等功能。现在,这将在不同的平台上以不同的方式实现。所以我可能会有一些子类,它们将使用特定于平台的apis来实现它。
现在我想要的另一个类将是一些将数据传输到USB端点的缓冲类。这又需要基于它们提供的api由不同平台实现。
现在假设我创建了一个基于Windows的USB设备类和一个缓冲类,并使用Windows提供的API实现这些类。我的问题是,如果我的Windows缓冲类需要Windows设备类中的一些数据,该怎么办?我可以使用什么样的模式,以便基类对子类中使用的基于内部中间平台的结构保持匿名,而缓冲类可以使用特定的设备类数据成员?想要为此获得一个好的设计。不知道我是否足够清楚写作。希望得到一些见解。
编辑:我知道工厂和抽象工厂。这与他们无关。我无法通过工厂模式通过UsbDevice * 的对象访问子类成员函数简要说明。
SomeWindowsUsbDevice : public UsbDevice {
public:
void findDevices() { // just a child class function. Not in base class
//Code to find devices using platform apis.
//fills below two private structures.
}
private:
DevEnum* pdevenum; //some platform specific structure.
Buffsize* pbufsize; // some platform specific structure.
}
SomeWindowsUsbDataTrf : public UsbDataTrf {
public:
DevEnum* getdevicelist() {
//Need to get access to SomeWindowsUsbDevice::pdevenum
}
Buffsize* getbuffsize() {
//Need to get access to SomeWindowsUsbDevice::pdevenum
}
}
答案 0 :(得分:0)
尝试端点重定向,更多详细信息可在Endpoint Redirection
获得我还建议你阅读工厂模式,在阅读时你会得到建议的原因,只是谷歌工厂模式,你会有一个很大的描述
答案 1 :(得分:0)
Abstract Factory pattern适用于您的情况。 “提供一个接口,用于创建相关或依赖对象的族,而无需指定其具体类。”