簡體   English   中英

子類互動設計

[英]Design for interaction of child classes

我想獲得一些指向以下設計問題的指導。

假設我想編寫一些類來枚舉USB設備並選擇特定的設備並通過它為不同的平台傳輸數據(這只是一個非常基本的場景,更多的是設計問題,而不是與USB相關的任何問題)。

現在,我想為USB設備提供一個設備基類,它可以具有基於字符串的enumerate_devices,get_particular_device等功能。現在,這將在不同的平台上以不同的方式實現。 因此,我可能會有一些子類,這些子類將使用特定於平台的api來實現此目的。

現在,我要擁有的另一個類將是一些將數據傳輸到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
        }

}

嘗試端點重定向,有關更多詳細信息,請參見端點重定向

我還建議您閱讀工廠模式,在閱讀時您會明白為什么建議這樣做,只是google工廠模式,您將獲得大量描述

抽象工廠模式適用於您的情況。 “提供一個用於創建相關或依賴對象族的接口,而無需指定其具體類。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM