假設有一個鍵盤 - 因此只有一個「鍵盤接口對象」,對吧?與顯示器類似[好吧,可能有兩個顯示器,但仍然]。
所以我的建議是有一個註冊和保持註冊的接口是這樣的一個「容器」:
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類型。
我喜歡這個想法。確實只有一個鍵盤和一個顯示器。我只需要按照需要通過HardwareRegistry對象? –
通常,單例有自己的函數來提供一個指向實際對象的指針。我會在上面編輯。 –
謝謝!我知道應該有一個簡單的解決方案。 –