我正在使用C ++开发一个程序,到目前为止,我已尝试在层中构建它。 所以,到目前为止,我已经有了一个类来处理启动后的所有操作,例如点击和键盘控制,并且位于消息循环等中,并且我有几个类实例充当“管理器”,例如Window经理和调试经理。
我的问题是,让这些“经理”中的某些人可以从任何地方访问的最佳方式是什么?
例如,在我制作程序时,几乎所有地方都需要提供数学和调试功能。到目前为止,我所做的只是将指针传递给管理器,因为我创建了每个需要访问它的类。 有没有更好的办法?这甚至是一种稍微好的方式吗?
答案 0 :(得分:2)
有更好的方法吗?
在过去的日子里,singletons是建议的解决方案。最近,singletons have fallen out of favor。
代替单身人士,在合适的命名空间下的一组函数是下一个最好的方法,IMO。
namespace WindowManager
{
...
}
namespace DebugManager
{
...
}
在各个命名空间中的函数实现中,您可以使用单例作为实现细节。
答案 1 :(得分:1)
您可以使用不同的设计模式。以下是一些:
工厂模式
例如,您可以在需要Debug实例的每个类中调用LoggerFactory.getLogger( ... );
。优点是您可以获得适合于调用它的上下文的不同实例。例如,您可以传递一个用于记录的类名。
单身人士模式
与工厂模式类似,但SomeFactory.getInstance()
将始终返回相同的实例。如果传递给各个类的所有指针都是针对同一个实例的,那么这是一个不错的选择。
全局变量 类似于单身模式,但更简单。通常不建议。
依赖注入
这基本上是工厂模式,其中类成员使用服务查找(ComponentRegistry.lookup(...)
)进行初始化。由容器自动完成。通常用于支持方法注释的语言。
静态方法对于实用程序功能,建议使用此方法。如果它们具有复杂状态(许多变量),则应将它们保存在实例中。这个实例可以是私人静态' final'例如,隐藏内部状态并提供一个干净的外观'致来电者。
当然还有更多。