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

    1.一种软件设计模式;

    2.定义:单例对象的类只允许一个实例存在;

    3.应用背景:

      许多时候只需要拥有一个的全局对象,这样有利于协调整体的行为。

      比如在某个服务器中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一获取。

    4.组成部分:

      1.构造方法为私有,这样保证唯有通过该类提供的静态方法获得该类的唯一实例。

      2.获得该实例的方法(通常使用getInstance这个名字),为静态。

    5.注意事项:

      1.多线程避免两个线程同时调用,那么它们同时没有检测到唯一实例的存在,从而同时各自创建一个。这样违背单例模式的唯一原则。

    6.写法例子:

      1.饿汉式(静态常量):

    public class Singleton {
    
        private final static Singleton INSTANCE = new Singleton();
    
        private Singleton(){}
    
        public static Singleton getInstance(){
            return INSTANCE;
        }
    }

      2.饿汉式(静态代码块):

    public class Singleton {
    
        private static Singleton instance;
    
        static {
            instance = new Singleton();
        }
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            return instance;
        }
    }
    

       3.双重检查:

    public class Singleton {
    
        private static volatile Singleton singleton;
    
        private Singleton() {}
    
        public static Singleton getInstance() {
            if (singleton == null) {
                synchronized (Singleton.class) {
                    if (singleton == null) {
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    }
    

       4.静态内部类:

    public class Singleton {
    
        private Singleton() {}
    
        private static class SingletonInstance {
            private static final Singleton INSTANCE = new Singleton();
        }
    
        public static Singleton getInstance() {
            return SingletonInstance.INSTANCE;
        }
    }
    

     7.适用场合:

      1.需频繁的进行创建和销毁的对象;

      2.创建对象时耗时过多或浪费资源过多;

      3.工具类对象;

      4.频繁访问数据库或文件的对象;

  • 相关阅读:
    JS项目快速压缩(windows平台)
    Maven工程的POM继承
    Docker构建一个node镜像
    win10家庭版安装Docker for Windows
    linux,vim和bash命令小册
    vue文档阅读笔记——计算属性和侦听器
    nodejs的jekins部署
    `vue-router`的`History`模式下的项目发布
    花式图表,炫技时刻!PPT技能
    在创业之路上不断创新
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/9956512.html
Copyright © 2011-2022 走看看