首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例滥用?

单例滥用?
EN

Stack Overflow用户
提问于 2013-05-26 05:24:03
回答 2查看 165关注 0票数 0

我有一些像资源管理器这样的管理器,它是单例的。有些对象确实需要调用这个管理器的方法。这个练习闻起来像床上的味道吗?

代码语言:javascript
复制
some object logic: ResourceManager::init()->callMethod();

我们没有使用对单例的引用,而是在运行时获取它。它合适吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-26 11:53:03

单例模式有它的优点和缺点,但如果你正在使用它,那么你所写的并不是太糟糕。

但是,我强烈建议将init()重命名为更类似于getInstance()的名称,如果这是该函数返回的内容。

就你的用法而言,写作中唯一真正的负面

代码语言:javascript
复制
a::getInstance()->foo();
a::getInstance()->bar();

而不是

代码语言:javascript
复制
a* thing = a::getInstance();
thing->foo();
thing->bar();

如果getInstance()函数没有被内联,可能会有额外的函数调用开销。

一般来说,如果你打算在一个函数中多次使用同一个单例,那么调用一次getInstance()会稍微好一点,但最终我认为这更多的是一个编码风格的问题,而不是任何真正的性能问题。

票数 2
EN

Stack Overflow用户

发布于 2013-05-26 21:46:35

使用单例的健康方法非常简单:

类ResourceManager { ... };//正常实现类

ResourceManager& GetResMan() { ... } //召唤和返回实例的全局访问点,它可以是本地静态的、文件名范围的静态的,甚至可以使用其他创建技巧来处理特殊情况

将其记录为提供单例的东西。

GetResMan().DoStuff();//客户端使用情况

从这里看,它是好是坏取决于应用程序逻辑/设计,您是否真的打算为该管理器提供一个单例--如果您是肯定的,那么您可以放心地忽略猛烈抨击活动。

一个改进的版本可以有两个访问函数,主流的返回const ref,这样你就可以很容易地将变异的客户端调用与其余的区分开来。但这取决于类的性质及其用例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16754035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档