• 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.频繁访问数据库或文件的对象;

  • 相关阅读:
    Oracle的序列、视图、索引和表空间
    MySQL存储过程
    MySQL触发器
    MySQL索引和视图
    完整性约束
    Mybatis的核心对象及运行流程
    Mybatis中配置连接池
    IDEA中创建Maven工程整合Mybatis
    Idea中创建JavaWeb工程
    实现整数集合的并、交、差运算
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/9956512.html
Copyright © 2020-2023  润新知