2014-02-17 48 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適用於您的情況。 「提供一個界面,用於創建相關或依賴對象的族,而不指定它們的具體類。」