gpt4 book ai didi

java - 在不使用单例的情况下将类限制为一个实例?

转载 作者:行者123 更新时间:2023-12-03 23:00:45 27 4
gpt4 key购买 nike

我不想使用单例,但我不能允许我的类有多个实例。

您认为这是一种好方法吗?如果不是,什么是更好的方法?

public class SoundSystem {

private static boolean instanceCreated = false;

public SoundSystem() {
if(instanceCreated) {
throw new IllegalStateException("Only one instance can be created.");
}

instanceCreated = true;
}
}

最佳答案

一个单例,即使您没有以“传统”方式强制执行它。我不推荐这种方法,我认为你应该找到另一种方法。

例如,为什么不在程序启动时创建单个 SoundSystem 实例?您无需明确强制其单一性,只需将该实例传递给需要访问声音系统的其他对象即可。作为奖励,如果有一天您需要它,这还可以让您轻松地放弃对不同类型的 SoundSystem 的支持(一个不错的小额外好处,即使您不需要这个)。

最重要的是,如果您尝试初始化多个 SoundSystem,OpanAL 初始化本身会失败吗?如果不是,那么就没有理由设置人为限制。如果是这样,那么您可以让 OpanAL 确定什么是错误,什么不是错误。但无论如何,如果您只是简单地创建一个实例并将其传递出去,而不是让您的所有应用程序类自己查询该实例,那将不会有风险。

小心你不要掉进XY Problem困在这里。单例并非天生邪恶,但出于某种原因,他们经常被滥用,因此一般建议反对他们。通常有一种更清洁的方法,而这些更清洁的方法通常会带来很多额外的好处。想想您正在尝试解决的实际问题/您正在尝试避免的情况。

关于java - 在不使用单例的情况下将类限制为一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22724547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com