美文网首页程序员
单例模式简介

单例模式简介

作者: eb6684925911 | 来源:发表于2018-09-08 00:12 被阅读25次

本文介绍了单例模式并附有java代码实现demo。内容仅供参考使用,有不足之处请及时指出,也欢迎大家交流探讨。

单例模式

单例模式是创建型模式的一种,其保证了单例类只有一个实例对象。

单例模式特性

单例模式实现方式有多种,但其遵循以下3个特性。

  • 单例类只能有一个实例对象。

  • 该实例对象只能由单例类本身构建。

  • 单例类必须向其他对象提供该实例对象。

懒汉式

public class SingletonDemo {

    private static SingletonDemo instance;

    private SingletonDemo() {

    }

    public static synchronized SingletonDemo getInstance() {

        if (null == instance) {
            instance = new SingletonDemo();
        }
        return instance;
    }
}

时间换空间,懒加载,用synchronized修饰保证了多线程安全,但也降低了效率。

饿汉式

public class SingletonDemo {

    private static SingletonDemo instance = new SingletonDemo();

    private SingletonDemo() {

    }

    public static SingletonDemo getInstance() {
        return instance;
    }
}

空间换时间,非懒加载,通过类加载机制保证了线程安全,没有使用synchronized,效率相对比要高一些。

双重检查加锁(DCL:Double-checked Locking)

public class SingletonDemo {

    private volatile static SingletonDemo instance;

    private SingletonDemo() {

    }

    public static SingletonDemo getInstance() {

        if (null == instance) {

            synchronized (SingletonDemo.class) {
                if (null == instance) {
                    // 因为该操作非原子性,需用volatile修饰
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }
}

时间换空间,懒加载,将synchronized由getInstance具体到对应的构建单例操作上,即保证了多线程安全,想对比懒汉式也提高了效率。

静态内部类

public class SingletonDemo {

    private static class SingletonDemoHolder {
        private static final SingletonDemo instance = new SingletonDemo();
    }

    private SingletonDemo() {

    }

    public static final SingletonDemo getInstance() {
        return SingletonDemoHolder.instance;
    }
}

时间换空间,懒加载,通过引入静态内部类,避免了SingletonDemo的加载导致instance的初始化,实现了懒加载,而且性能上相对比双重检查加锁有所提高。

相关文章

  • 设计模式之单例模式

    文章结构1.单例模式简介2.单例模式种类3.参考文章 1.单例模式简介 1.1简介 单例模式,从字面上看是“一个实...

  • 单例模式

    目录 1、设计模式简介 2、什么是单例模式 3、单例模式应用场合 4、单例模式作用 5、单例模式3个要点/要素 6...

  • 设计模式[1]-单例模式-Singleton Pattern

    1. 单例模式简介 单例模式(Singleton Pattern)是创建型模式(Creational Patter...

  • 设计模式

    设计模式简介 单例设计模式 问题:单例设计模式是什么?为什么要学它?怎么用它? 1.定义:单例模式(Singlet...

  • 单例模式

    一、介绍 二、单例模式代码实现 三、单例的简介写法

  • 2、创建型设计模式-单例设计模式

    江湖传言里的设计模式-单例设计模式 简介:什么是单例设计模式和应用 备注:面试重点考查 单例设计模式:这个是最简单...

  • 单例模式(Singleton Pattern)

    一、单例模式简介 1. 定义 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,...

  • Android设计模式(单例模式)

    目录 1.单例模式简介 2.单例模式关键点 3.单例模式UML图 4.单例模式的实现方式饿汉式懒汉式同步锁懒汉式D...

  • 创建型模式——单例模式

    单例模式简介 单例模式是java创建型模式之一,主要作用是创建唯一对象。 单例模式特点:1.单例类只有一个实例。2...

  • 浅析Java并发中的单例模式

    一、单例模式简介 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可...

网友评论

    本文标题:单例模式简介

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