单身人士模式 - 这是更好的做法?

时间:2011-01-14 13:46:10

标签: design-patterns singleton

我有一个单身人士,我在争论是否有一些静态方法可以隐藏单身人士对客户端的使用是不好的做法。例如:

Singleton::Instance()->Foo();

Vs以上。

Singleton::FooHelper();

定义FooHelper的地方:

class Singleton
{
    ...

    static void FooHelper()
    {
        Singleton::Instance()->Foo();
    }
    ...
}

第二种解决方案是否被视为不良做法?我不会为Singleton的所有方法创建辅助函数,只是客户端代码经常使用的方法。

2 个答案:

答案 0 :(得分:7)

一个想法是完全摆脱单身人士。在系统中使用适当的所有者使其成为一个合适的类,其他类必须去获取该对象。然后你可以像“普通”对象一样访问它,它看起来不会那么刺耳。

很多人都会考虑singletons an anti-pattern。我发现他们遇到的一个大问题是当你发现有一天需要时,他们会很难概括你的代码。随着计算机变得更快并获得更多内核,我工作的地方现在发现自己希望能够同时在同一台机器上运行多个主程序。这样做的最大挑战是我们愚蠢编码的所有单身人士。

尝试不使用单身一次,看看它是如何为你工作的。

答案 1 :(得分:1)

这种做法并不错,只要原始Foo()方法1°仍可公开获得,2°命名方案明显表明FooHelper()等同于调用Foo() on实例。

当然,如果你发现自己总是在调用FooHelper()并且从不调用Foo(),那就重新考虑你的设计:单例的重点(而不是简单的全局函数命名空间方法)它是一个对象 - 所以至少代码的某些部分应该使用它。