美文网首页WeLi的java学习程序员Java学习笔记
23天学习23种设计模式——单例模式

23天学习23种设计模式——单例模式

作者: soberbad | 来源:发表于2017-08-23 23:00 被阅读80次

是什么——什么是单例模式

单例模式(Singleton Pattern),是一种创建型设计模式,它规定了一个类有且只有一个实例存在

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

单例模式类图

为什么——为什么要用单例模式

节约系统资源,避免频繁创建对象。

怎么做——怎么实现单例模式

  • 1.懒汉式单例模式
    懒加载,需加同步保证线程安全。同步方法导致不高效。
/**
 * 懒汉式单例模式
 */
public class LazySingleton {
    
    private static LazySingleton INSTANCE;
    
    private LazySingleton(){
        
    }
    
    public static synchronized LazySingleton getInstance(){
        if(INSTANCE == null){
            INSTANCE = new LazySingleton();
        }
        return INSTANCE;
    }
    
}

  • 2.饿汉式单例模式
    线程安全,非懒加载,某些情况下不适用。
/**
 * 饿汉式单例模式
 */
public class EagerSingleton {
    
    private static EagerSingleton INSTANCE = new EagerSingleton();
    
    private EagerSingleton(){
        
    }
    
    public static EagerSingleton getInstance(){
        return INSTANCE;
    }
    
}
  • 3.双重加锁检查单例模式
    懒加载,线程安全,JDK1.5之前存在问题,不建议使用。
/**
 * 双重加锁检查单例模式
 */
public class DoubleCheckedLockSingleton {

    private static volatile DoubleCheckedLockSingleton INSTANCE;

    private DoubleCheckedLockSingleton(){

    }

    public static DoubleCheckedLockSingleton getInstance(){
        if(INSTANCE == null){
            synchronized (DoubleCheckedLockSingleton.class){
                if(INSTANCE == null){
                    INSTANCE = new DoubleCheckedLockSingleton();
                }
            }
        }
        return INSTANCE;
    }
}

4.静态内部类单例模式
懒加载,线程安全。Effective Java推荐的方法。

/**
 * 静态内部类单例模式
 */
public class StaticNestedClassSingleton {

    private static class SingletonHolder{
        private static final StaticNestedClassSingleton INSTANCE 
         = new StaticNestedClassSingleton();        
    }

    private StaticNestedClassSingleton(){

    }
    
    public static StaticNestedClassSingleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
}

5.枚举单例模式
简单,线程安全,非懒加载,能避免反序列化生成新的对象。

/**
 * 枚举单例模式
 */
public enum EnumSingleton {
    INSTANCE;
}

相关文章

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • iOS-单例模式

    swift的单例设计模式 OC的单例设计模式 新学习一种单例思想

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • 设计模式系列教程之单例模式-原理介绍

    设计模式系列教程之单例模式-原理介绍 一:单例模式(Singleton)学习步骤 经典的单例模式原理: 本文出处:...

  • 【Java】设计模式 —— 深入浅出单例模式

    学习笔记 参考:深入浅出单实例SINGLETON设计模式单例模式【Java】设计模式:深入理解单例模式 场景:一般...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • JAVA中各种单例模式的实现与分析

    单例模式是学习设计模式过程中最基本的一个设计模式,基本上一开始学习就会学到单例模式,实际上在java中实现单例模式...

  • 【设计模式】单例模式

    学习文章 iOS设计模式 - 单例 SwiftSingleton 原理图 说明 单例模式人人用过,严格的单例模式很...

网友评论

    本文标题:23天学习23种设计模式——单例模式

    本文链接:https://www.haomeiwen.com/subject/ofwjdxtx.html