假设有一个键盘 - 因此只有一个“键盘接口对象”,对吧?与显示器类似[好吧,可能有两个显示器,但仍然]。
所以我的建议是有一个注册和保持注册的接口是这样的一个“容器”:
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对象? –
通常,单例有自己的函数来提供一个指向实际对象的指针。我会在上面编辑。 –
谢谢!我知道应该有一个简单的解决方案。 –