zoukankan      html  css  js  c++  java
  • 1.单例模式

    1.定义

    Ensure a class has only one instance,and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)

    2.模式讲解

    (1)类图

    (2)单例模式通用代码

     1 public class Singleton
     2 {
     3     private static Singleton singleton = new Singleton();
     4 
     5     private Singleton()
     6     {}
     7 
     8     public static Singleton GetSingleton()
     9     {
    10         return singleton;
    11     }
    12 }

    3.单例模式的多种实现方式

    (1)简单的实现

        public sealed class Singleton
        {
            private static Singleton _instance = null;
    
            private Singleton()
            {
            }
    
            public static Singleton Instance
            {
                get
                {
                    if (_instance == null)
                    {
                        _instance = new Singleton();
                    }
                    return _instance;
                }
            }
        }

    缺点:这种方式的实现对于线程来说并不是安全的,因为在多线程的环境下有可能得到Singleton类的多个实例。

    优点:直到对象要求产生一个实例才执行实例化;这种方法称为“惰性实例化”。惰性实例化避免了在应用程序启动时实例化不必要的 singleton

    (2)安全的线程

        public sealed class Singleton
        {
            private static Singleton _instance = null;
    
            private static readonly Object O = new object();
    
            private Singleton()
            {
            }
    
            public static Singleton Instance
            {
                get
                {
                    lock (O)
                    {
                        if (_instance == null)
                        {
                            _instance = new Singleton();
                        }
                        return _instance;
                    }
                }
            }
        }

    优点:这种方式的实现对于线程来说是安全的。我们首先创建了一个进程辅助对象,线程在进入时先对辅助对象加锁然后再检测对象是否被创建,这样可以确保只有一个实例被创建,因为在同一个时刻加了锁的那部分程序只有一个线程可以进入。这种情况下,对象实例由最先进入的那个线程创建,后来的线程在进入时(instence == null)为假,不会再去创建对象实例了。

    缺点:这种实现方式增加了额外的开销,损失了性能。

    (3)静态初始化,饿汉式单例模式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)

        public sealed class Singleton
        {
            private static readonly Singleton singleton = new Singleton();
    
            private Singleton()
            { }
    
            public static Singleton GetSingleton()
            {
                return singleton;
            }
        }
  • 相关阅读:
    Node.Js安装教程
    使用Idea 配置maven
    Sublime Text3 使用记录
    配置Java 环境变量
    什么是应届生?要不要签三方?看看就知道了
    Python学习(二)——深度学习入门介绍
    python学习(一)——python与人工智能
    php学习(二)——html + css
    19、SOAP安装,运用与比对结果解释
    24、Linux 多线程压缩工具pigz 的学习
  • 原文地址:https://www.cnblogs.com/JustYong/p/4596536.html
Copyright © 2011-2022 走看看