关于c#:Singleton Design Pattern的优势是什么

what is the advantage of Singleton Design Pattern

每个人都知道如何为单例设计模式编写代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;  
        }  
    }  
}

很明显,当我们多次创建任何类的实例时,内存被分配给每个实例,但是在单实例设计模式中,单个实例为所有调用提供服务。

1)我有点困惑,真的没有意识到原因是什么……当一个人应该选择单例设计模式时。只是为了节省一些记忆或其他好处。

2)假设一个程序可以有多个类,那么哪个类应该遵循单例设计模式?单件设计模式的优势是什么?

3在现实生活中的应用程序中,什么时候应该按照单例设计模式进行任何类?谢谢

这是线程安全单例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;  
        }  
    }  
}


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

以一个场景为例,假设一个公司应用程序只有一个CEO。如果要创建或访问ceo对象,则每次都应返回相同的ceo对象。

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


其他的答案也不错。但它们提供了模式行为特征的例子。但是,单子更多的是关于创造。因此,这种模式最重要的好处之一就是它对资源友好。当您实际上不需要一个新的new object时,您不会为它浪费内存。

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


单体设计模式的实时用法/好处。

  • 使用多线程时,管理多线程池。
  • 在SOA(面向服务的体系结构)中管理"服务主机存储库"。
  • 用于日志框架实现
  • 在自动化测试/单元测试项目中,即编码的UI项目。
  • 在大型应用程序中实现缓存。
  • 用于配置设置对应用程序进行正确控制。

  • 单件模式的好处:

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

    ?灵活性:由于类控制实例化过程,因此类具有更改实例化过程的灵活性。

    与全局变量相比,singleton的优势在于,当使用singleton时,您绝对可以确定实例的数量,并且,您可以改变主意并管理任意数量的实例。


    一般来说,singleton在oop中被认为是反模式的,因为它意味着一个类在断言关于整个程序——在oop中它不应该知道——它知道它将是唯一的一个。也就是说,单例是在我的经验中实现常量的正确方法。一般来说,如果有什么东西要硬编码到程序中(比如数据库用户名),那么它可以被移动到配置文件或单例文件中。

    JavaBeats C(我认为…)的几个领域之一是对枚举的支持。Java通过枚举提供真正的OO常量,因此这就是我将如何在Java中始终实现单体的方法。C没有现成的等价物。


    使用singleton的一个有用的地方是,如果它正在访问一些您只想拥有一个访问点的资源。例如,我在编写代码与设备对话时就使用了它。我只想要一段代码和设备对话,所以我使用了单例代码。任何试图创建与设备对话的对象的另一个实例的尝试都只会返回同一个对象,因此我不必担心两个实例会维护设备的不同步数据,或者将进出设备的消息混淆或无序。

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