2014-02-17 47 views
0

我想获得一些指向以下设计问题的指针。儿童班互动设计

假设我想编写一些类来枚举USB设备,并选择特定的设备并通过它传输数据给不同的平台(这只是一个非常基本的场景,而不是与USB有关的任何设计问题)。

现在我想要一个USB设备的基础设备类,它可以具有像enumerate_devices,get_particular_device基于字符串等功能。现在这将在不同的平台上实现不同。所以我可能会有一些子类,它们将使用平台特定的API来实现这一点。

现在我想要的其他类将是一些将数据传输到USB端点的缓冲区类。这又需要根据他们提供的apis,由不同的平台实施。

现在假设我创建了一个基于Windows的USB设备类和一个缓冲类,并实现了使用Windows提供的apis。我的问题是,如果我的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

为什么要访问私人会员? UsbDevice中应该有访问器。否则,我认为如果您使用私人会员,任何模式都不会对您有所帮助。你需要明确的演员阵容,然后 – Nitesh

回答

0

尝试端点重定向,更多详细信息,请Endpoint Redirection

我也建议你阅读工厂模式,阅读你就会明白为什么我们建议的地步,只是谷歌的工厂模式,你将有一个巨大的描述可用

+0

嗨,我知道工厂模式。我的问题与此无关。在使用工厂模式之后,我们将无法访问子类的私有变量,除非我们直接引用SomeWindowsUsbDevice。 –

+0

你真的明白什么是多态吗? –

0

Abstract Factory pattern适用于您的情况。 “提供一个界面,用于创建相关或依赖对象的族,而不指定它们的具体类。”