2013-01-31 18 views
0

我不確定如何搜索此問題。將應用程序對象傳遞到較低級別

我正在做一個嵌入式系統設計與下面的場景。

  • 我有一個需要創建一批的硬件接口,如鍵盤,顯示器,通信端口,等等的東西,整體轉換的主應用程序類

  • 現在我都這些在主應用程序中可以使用的元素很棒

  • 應用程序類包含幾個可以進入並保留一段時間的子類。一個例子是,它進入,直到菜單關閉

  • 我需要的菜單類,也有很多在應用層面

  • 創建的硬件對象的交互該類中運行的菜單類

    在不使用全局變量的情況下最好的方法是什麼?有沒有解決這個問題的好方法?

我可以傳遞每個對象到菜單類,但我不想創建一個具有20個參數的構造函數。我目前的解決方案是將所有對象放入一個結構中,並將該結構傳遞給子類構造函數。這樣他們也可以訪問。

讓我對這種方法感到迷惑的部分是,我必須定義我不太喜歡的應用程序之外的結構。有些東西只是告訴我這不是最好的解決方案。

歡迎任何建議。

回答

0

假設有一個鍵盤 - 因此只有一個「鍵盤接口對象」,對吧?與顯示器類似[好吧,可能有兩個顯示器,但仍然]。

所以我的建議是有一個註冊和保持註冊的接口是這樣的一個「容器」:

class KeyPad 
{ 
public: 
    int getKeyPressed(); 
}; 

class Display 
{ 
    public: 
    OutputText(std::string msg); 
}; 


... bunch of other stuff ... 

class HardwareRegistry 
{ 
    priviate: 
     Keypad *keypad; 
     Display *display; 

     static HardwareRegistry *myself; 

    public: 
     Keypad* GetKeypad() { return keypad; } 
     Display* GetDisplay() { return display; } 
     void RegisterKeypad(Keypad *akeypad) { keypad = akeypad; } 
     void RegisterDisplay(Display *adisplay) { display = adisplay; } 


     static HardwareRegistry* GetHwRegistry() 
     { 
     if (!myself) myself = new HardwareRegistry; 
     ASSERT(myself); // If we don't have a pointer now, panic! 
     return myself; 
     } 
}; 

然後你只是有一個Singleton Pattern提供您HardwareRegistry,並註冊的設備如您在硬件​​初始化期間創建它們。例如,如果您支持不同類型的小鍵盤,顯示器等,那麼您將使用「接口基類」來實現這些類型,並且註冊表返回KeypadBase類型。

+0

我喜歡這個想法。確實只有一個鍵盤和一個顯示器。我只需要按照需要通過HardwareRegistry對象? –

+0

通常,單例有自己的函數來提供一個指向實際對象的指針。我會在上面編輯。 –

+0

謝謝!我知道應該有一個簡單的解決方案。 –

相關問題