Singleton Design Pattern的优势是什么?

时间:2012-10-15 18:27:16

标签: c# oop

每个人都知道如何为Singleton Design Pattern.say编写代码

public class Singleton  
{  
    // Private static object can access only inside the Emp class.  
    private static Singleton instance;  

    // Private empty constructor to restrict end use to deny creating the object.  
    private Singleton()  
    {  
    }  

    // A public property to access outside of the class to create an object.  
    public static Singleton Instance  
    {  
        get  
        {  
            if (instance == null)  
            {  
                instance = new Singleton();  
            }  
            return instance;  
        }  
    }  
}  

很明显,当我们创建任何类的实例时,很多时候会为每个实例分配内存,但在Singleton设计模式的情况下,单个实例为所有调用提供服务。

1)我有点迷惑,真的没有意识到原因是什么......当一个人应该选择Singleton Design Pattern时。只是为了节省一些记忆或任何其他好处。

2)假设任何单个程序可以有多个类,那么哪个类应该遵循Singleton设计模式? Singleton Design Pattern有什么优势?

3在现实生活中的应用程序何时应该按照Singleton Design Pattern进行任何课程? 感谢

这是线程安全的单例

public sealed class MultiThreadSingleton   
{   
    private static volatile MultiThreadSingleton instance;   
    private static object syncRoot = new Object();   

    private MultiThreadSingleton()   
    {   
    }   

    public static MultiThreadSingleton Instance   
    {   
        get   
        {   
            if (instance == null)   
            {   
                lock (syncRoot)   
                {   
                    if (instance == null)   
                    {   
                        instance = new MultiThreadSingleton();   
                    }   
                }   
            } 

        return instance;   
        }   
    }   
}

7 个答案:

答案 0 :(得分:6)

每次只确保对象的一个​​相同实例。

采取一个方案,比如公司申请,只有一个CEO。如果要创建或访问CEO对象,则应每次都返回相同的CEO对象。

另外,在登录应用程序后,当前用户每次都必须返回相同的对象。

答案 1 :(得分:3)

其他答案也很好。但他们提供了模式的行为特征的示例。但是,Singleton更多的是关于创造。因此,该模式最重要的好处之一是它对资源友好。当你实际上不需要新的时候,你不会浪费new object的记忆。

这会带来另一个好处,即避免实例化开销。

答案 2 :(得分:2)

Singleton模式的好处:

•实例控制:Singleton防止其他对象实例化他们自己的Singleton对象副本,确保所有对象都访问单个实例。

•灵活性:由于类控制实例化过程,因此该类可以灵活地更改实例化过程。

Singleton优于全局变量的优势在于,您完全可以确定使用Singleton时的实例数,并且您可以改变主意并管理任意数量的实例。

答案 3 :(得分:2)

Singleton Design Pattern的实时使用/优势。

  1. 使用多线程时,管理多线程池。
  2. 管理SOA(面向服务的体系结构)中的“服务主机存储库”。
  3. 用于日志框架实施
  4. 在自动化测试/单元测试项目中,即编码的UI项目。
  5. 在大型应用程序中实现缓存。
  6. 用于配置设置以正确控制应用程序。

答案 4 :(得分:1)

一般来说,单例在OOP中被认为是一种反模式,因为它意味着一个类声明了整个程序 - 它在OOP中应该不知道 - 它知道它将是唯一的一个。话虽这么说,单身人士是我经验中实现常数的正确方法。一般来说,如果我要将某些内容硬编码到程序中(例如数据库用户名),那么可以将其移动到Config文件或单例中。

Java打败C#的少数领域之一(在我看来......)是对枚举的支持。 Java通过枚举提供真正的OO常量,因此我将始终在Java中实现单例。 C#没有现成的等价物。

答案 5 :(得分:0)

使用单例的一个有用的地方是,如果它正在访问您只想拥有单个访问点的某些资源。例如,我在编写一些代码与设备通信时使用过它。我只想要一段代码与设备通话,所以我使用单例。任何创建与设备通信的对象的另一个实例的尝试都只会给你相同的对象,所以我永远不必担心有两个实例维护有关设备的不同步数据或者从设备获取消息混合向上或向外。

但是,当然,您没有义务使用它们。它们只是一种有时有用的工具。

答案 6 :(得分:0)

它可以改善在JVM中处理内存的方式,并且可以正确使用内存,从而可以达到更好的性能。您不是在创建多个对象,而是在尝试仅创建一个对象,这样一来,垃圾收集器的工作量减少了,JVM堆中的内存占用也减少了。