这是一个有很多答案的问题 - 我有兴趣知道其他人认为是"最佳实践".
请考虑以下情况:您有一个面向对象的程序,它包含许多不同类所需的一个或多个数据结构.您如何使这些数据结构可访问?
您可以显式传递引用,例如,在构造函数中.这是"正确的"解决方案,但它意味着在整个程序中复制参数和实例变量.这使得对全局数据的更改或添加变得困难.
您可以将所有数据结构放在单个对象中,并传递对该对象的引用.这可以是为此目的创建的对象,也可以是程序的"主要"对象.这简化了(1)的问题,但是数据结构可能或可能不具有彼此的任何关系,并且将它们一起收集在单个对象中是非常随意的.
您可以使数据结构"静态".这使您可以直接从其他类引用它们,而无需传递引用.这完全避免了(1)的缺点,但显然不是OO.这也意味着只能有一个程序实例.
当有很多数据结构时,很多类都需要,我倾向于使用(2).这是OO纯度和实用性之间的折衷.其他人做什么?(对于它的价值,我主要来自Java世界,但这个讨论适用于任何OO语言.)
全球数据并不像许多OO纯粹主义者所声称的那么糟糕!
毕竟,在实现OO类时,您通常会在操作系统中使用API.如果它不是一大堆全球数据和服务,那该怎么办呢!
如果你在程序中使用了一些全局的东西,你只是扩展了这个巨大的环境,你的类实现已经可以看到操作系统带有一些特定于你的应用程序的域的数据.
在任何地方传递指针/参考通常都会在OO课程和书籍中讲授,从学术上来说听起来不错.实际上,这通常是要做的事情,但盲目而绝对地遵循这一规则是错误的.对于一个体面的大小的程序,你最终可以在整个地方传递一堆引用,这可能导致完全不必要的苦差事工作.
全球可访问的服务/数据提供者(显然是在一个漂亮的界面后面抽象)在一个体面的应用程序中几乎是必须的.