最近,我一直在使用 Bukkit API 进行编码,但是我的问题与它没有直接关系。
在 Bukkit API 中,可以拥有主类的单个实例 (new MainClass()
引发错误),所以我想知道,使用构造函数将主类传递给我的所有类是否更好,或者我应该只使用返回实例的静态方法(MainClass.getInstance()
)
我很好奇哪一个更好(在性能和实践方面)。
就实践而言,更好的方法将是您的第一个建议:
使用构造函数将主类传递给我的所有类
这就是所谓的依赖注入 https://en.wikipedia.org/wiki/Dependency_injection,并且是全球访问的首选替代方案 https://stackoverflow.com/questions/1300655/whats-alternative-to-singleton.
它可以防止过度曝光(鼓励封装 https://en.wikipedia.org/wiki/Encapsulation_(computer_programming),这很好),并且通过允许使测试变得更容易自然嘲笑 https://en.wikipedia.org/wiki/Mock_object(而不是使用像 PowerMock 这样的框架)。如果可能的话,建议您使用此方法。
至于你的第二个建议:
我应该只使用返回实例的静态方法吗
这种方法往往会被人反对,特别是如果Main
是可变的。
如果您公开一个全局可变实例,您就引入了全局状态,这往往是一种痛苦 https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil.
任何依赖它的模块最终都可能耦合到依赖它的其他模块。这被称为普通联轴器 https://en.wikipedia.org/wiki/Coupling_(computer_programming)#Types_of_coupling,并且应该尽可能避免,因为它是最紧密的耦合形式之一。
全局访问使访问变得更容易,但代价是可能会混乱代码。它实际上应该只在需要时使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)