2013-01-31 21 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

谢谢!我知道应该有一个简单的解决方案。 –

相关问题