Emi*_*ier 10 singleton design-patterns anti-patterns
可能重复:
在设计模式上:何时使用Singleton?
这个问题不是关于单身人士是否"被视为有害".我只是想知道,从你的经验,都有些什么具体情况,其中单身似乎运作良好.
编辑: 请,如果你想讨论单身的恰当性和/或邪恶一般,有已位于exising问题:137975,11831
哎呀!我刚刚发现我的问题已在这里被问到:关于设计模式:何时使用Singleton?
我们基本上将它们用于两件事:日志记录和配置.两者都假设应用程序具有中央配置和中央日志文件,并不总是有效,但在我们的大部分代码中都是如此.我们还偶尔会对某些工厂类或缓存类使用它们,以确保我们不会复制关键元数据.
扩大我的评论...
这个问题措辞不佳,单身人士似乎在许多情况下都能很好地工作。应该是“在哪些特定情况下单身人士不会暴露其负面属性?” 简而言之,“什么时候全局变量好”?
全局变量是一个全局变量。
只要你使用
void f()
{
X* x = X::getInstance();
...
}
而不是void f(X*),您的意大利面订单已被接受。
单身人士激增,喜欢相互依赖。 SessionManager使用EventManager哪个使用LogManager. 有人希望日志文件提及当前用户的姓名。该LogManager维护者增加了SessionManager::getInstance()->getUser()->getName();,一切的玫瑰花,直到LoginManager,它也使用LogManager,希望登录登录失败。
单例会抑制可测试性。
单实例属性仅在生产代码中是半有用的。您可能void f()根本无法测试该功能,并且可能仅针对快乐路径进行(很少)测试。
你可以猜到,我对全局变量什么时候好用的回答?是“从不”。什么是你的?