一直等着没下手JAVA开发🌺程序小🐒子首页投稿(暂停使用,暂停投稿)

设计模式笔记——单例设计模式

2016-11-25  本文已影响95人  小白聊技术

什么是单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,并提供一个全局访问点。

单例模式的应用场景

实现一个单例模式很简单,但我没有想过单例模式有什么用处,直到一次笔试就遇到了问单利模式的应用场景有哪些。

单例模式的应用场景:线程池(Thread Pool)、缓存(Cache)、对话框、处理偏好设置、注册表(Registry)对象,日志对象,充当打印机、显卡等设备的驱动程序的对象。这类对象只能有一个对象,如果出现多个实例就会导致很多问题,例如:程序的行为异常、资源使用过量、或者是出现不一致的结果。

Java 代码实现单例

有四种方式实现单例模式,分别是:饿汉式、懒汉式、双重检查加锁、枚举。接下来我会结合代码介绍这四种方式。

/**
 * 单例模式(饿汉式实现)
 * @author cnbo
 */
public class Singleton1 {
    //定义一个静态的Singleton1实例
    private static final Singleton1 singleton =
            new Singleton1();
    
    //私有化构造函数以致外部无法创建Singleton1实例
    private Singleton1() {}
    
    //提供一个静态方法供外部使用Singleton1实例
    public static Singleton1 getInstance() {
        return singleton;
    }
}
  /**
 * 单例模式(懒汉式实现)
 * @author cnbo
 */
public class Singleton2 {
    private static Singleton2 singleton;
    
    //私有化构造函数
    private Singleton2() {}
    
    public static Singleton2 getInstance() {
        //判断singleton是否为 null,如果为null则创建,否则直接返回
        if (singleton == null) {
            singleton = new Singleton2();
        }
        
        return singleton;
    }
}
/**
 * 单例模式(线程同步实现)
 * @author cnbo
 */
 public class Singleton3 {
     private static Singleton3 singleton;
    
     private Singleton3() {}
    
     public static Singleton3 getInstance() {
         //双重检查加锁
         if (singleton == null) {
            synchronized(Singleton3.class) {
                 if (singleton == null) {
                    singleton = new Singleton3();
                 }
             }
         }
        
         return singleton;
     }
 }
/** 
  * 单例模式(枚举实现) 
 * @author cnbo 
 */ 
 public enum Singleton4 { 
     INSTANCE; 
 } 

是不是觉得枚举实现单例的代码太简单了,我想说的是,枚举就是这么任性,就是要这么简单。

FAQ

上一篇下一篇

猜你喜欢

热点阅读