如何访问全局类实例?

时间:2015-11-13 19:40:50

标签: c++ class instance global

我正在使用C ++开发一个程序,到目前为止,我已尝试在层中构建它。 所以,到目前为止,我已经有了一个类来处理启动后的所有操作,例如点击和键盘控制,并且位于消息循环等中,并且我有几个类实例充当“管理器”,例如Window经理和调试经理。

我的问题是,让这些“经理”中的某些人可以从任何地方访问的最佳方式是什么?

例如,在我制作程序时,几乎所有地方都需要提供数学和调试功能。

到目前为止,我所做的只是将指针传递给管理器,因为我创建了每个需要访问它的类。 有没有更好的办法?这甚至是一种稍微好的方式吗?

2 个答案:

答案 0 :(得分:2)

  

有更好的方法吗?

在过去的日子里,singletons是建议的解决方案。最近,singletons have fallen out of favor

代替单身人士,在合适的命名空间下的一组函数是下一个最好的方法,IMO。

namespace WindowManager
{
   ...
}

namespace DebugManager
{
   ...
}

在各个命名空间中的函数实现中,您可以使用单例作为实现细节。

答案 1 :(得分:1)

您可以使用不同的设计模式。以下是一些:

  • 工厂模式 例如,您可以在需要Debug实例的每个类中调用LoggerFactory.getLogger( ... );。优点是您可以获得适合于调用它的上下文的不同实例。例如,您可以传递一个用于记录的类名。

  • 单身人士模式 与工厂模式类似,但SomeFactory.getInstance()将始终返回相同的实例。如果传递给各个类的所有指针都是针对同一个实例的,那么这是一个不错的选择。

  • 全局变量 类似于单身模式,但更简单。通常不建议。

  • 依赖注入 这基本上是工厂模式,其中类成员使用服务查找(ComponentRegistry.lookup(...))进行初始化。由容器自动完成。通常用于支持方法注释的语言。

  • 静态方法对于实用程序功能,建议使用此方法。如果它们具有复杂状态(许多变量),则应将它们保存在实例中。这个实例可以是私人静态' final'例如,隐藏内部状态并提供一个干净的外观'致来电者。

当然还有更多。