我想得到一些关于下面的设计问题的建议。
假设我想要编写一些类来枚举USB设备,选择特定的设备并通过它为不同的平台传输数据(这只是一个设计问题的非常基本的scenario.More,而不是任何与USB相关的问题)。
现在我想为USB设备创建一个设备基类,它可以具有enumerate_devices、基于字符串的get_particular_device等功能。因此,我可能会有一些子类,它们将使用特定于平台的apis来实现这一点。
现在,我想要的另一个类是一些buffer类,它将把数据传输到USB端点。这同样需要由不同的平台基于它们提供的apis来实现。
现在假设我创建了一个基于Windows的USB设备类和一个buffer类,并使用Windows提供的apis实现它们。我的问题是,如果我的Windows buffer类需要来自Windows设备类的一些数据,我该怎么办。我可以使用哪种模式,使基类对子类中使用的基于内部中间平台的结构保持匿名,而buffer类可以使用特定的设备类数据成员?想要得到一个好的设计。不知道我的文字是否写得足够清楚。希望能获得一些洞察。
编辑:我知道工厂和抽象工厂。这与他们无关。我不能通过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
}
}发布于 2014-02-17 15:19:31
尝试端点重定向,有关更多详细信息,请访问Endpoint Redirection
我还建议你阅读工厂模式,在阅读时你会得到为什么建议它的观点,只要谷歌工厂模式,你会有一个巨大的描述可用
发布于 2014-02-17 15:27:16
Abstract Factory pattern适用于您的情况。“提供用于创建相关或从属对象族的接口,而无需指定它们的具体类。”
https://stackoverflow.com/questions/21822748
复制相似问题