据推测,只有一个键盘 - 因此只有一个“键盘接口对象”,对吧?与显示类似 [好吧,可能有两个显示,但仍然]。
所以我的建议是有一个注册和一个保存注册接口的“容器”,如下所示:
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;
}
};
然后,您只需要一个单例模式来提供您的 HardwareRegistry,并在您在硬件初始化期间创建设备时注册设备。
当然,如果您支持不同类型的键盘、显示器等,那么您将使用“接口基类”来实现它们,例如,注册表返回 KeypadBase 类型。