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

    一、定义: 
         单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
     
    二、特征:
          1、单例类只能有一个实例。
           2、单例类必须自己创建自己的唯一实例。
           3、单例类必须给所有其他对象提供这一实例。
    单例模式保证了全局对象的唯一性,比如系统启动读取配置文件就需要单例保证配置的一致性。
     
    三、实现:私有化构造方法
     
        1.饿汉式单例(立即加载方式)
         public class Singleton1 {
         // 私有构造
         private Singleton1() {}
         private static Singleton1 single = new Singleton1();
        // 静态工厂方法
        public static Singleton1 getInstance() {
          return single;
          }
    }
     
    饿汉式单例在类加载初始化时就创建好一个静态的对象供外部使用,除非系统重启,这个对象不会改变,所以本身就是线程安全的。
     
    2、 懒汉式单例(延迟加载方式)
        public class Singleton2 {
         // 私有构造
           private Singleton2() {}
           private static Singleton2 single = null;
           public static Singleton2 getInstance() {
                if(single == null){
                     single = new Singleton2();
                  }
                     return single;
            }
        }
    该示例虽然用延迟加载方式实现了懒汉式单例,但在多线程环境下会产生多个single对象,改造方式:  
     
      public class Singleton3 {
        // 私有构造
           private Singleton3() {}
             private static Singleton3 single = null;
          public static Singleton3 getInstance() {
         // 等同于 synchronized public static Singleton3 getInstance()
          synchronized(Singleton3.class){
             // 注意:里面的判断是一定要加的,否则出现线程安全问题
                if(single == null){
                    single = new Singleton3();
           }
        }
                    return single;
        }
    }   
       
  • 相关阅读:
    例题6-8 Tree Uva548
    例题6-7 Trees on the level ,Uva122
    caffe Mac 安装
    Codeforces Round #467 (Div. 1) B. Sleepy Game
    Educational Codeforces Round37 E
    Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons
    Good Bye 2017 E. New Year and Entity Enumeration
    Good Bye 2017 D. New Year and Arbitrary Arrangement
    Codeforces Round #454 D. Seating of Students
    浙大紫金港两日游
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/10955637.html
Copyright © 2011-2022 走看看