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

  • 相关阅读:
    在同步块中修改指向同步对象的引用
    算法学习记录3 插入排序
    算法学习记录2 归并排序
    算法学习记录1 快速排序
    CE学习记录1
    jenkins 学习记录2
    jenkins 学习记录1
    扩展 jquery miniui 组件实现自动查询数据
    java对象与XML相互转化
    分享公司缓存的用法
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/9956512.html
Copyright © 2011-2022 走看看