设计子类的交互

时间:2014-02-17 07:04:47

标签: c++ design-patterns

我想得到一些指向以下设计问题的建议。

假设我想编写一些类来枚举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
        }

}

2 个答案:

答案 0 :(得分:0)

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

获得

我还建议你阅读工厂模式,在阅读时你会得到建议的原因,只是谷歌工厂模式,你会有一个很大的描述

答案 1 :(得分:0)

Abstract Factory pattern适用于您的情况。 “提供一个接口,用于创建相关或依赖对象的族,而无需指定其具体类。”