java中的单例模式

单例模式是一种设计模式,这一种设计模式的目的是使得该类在整个JVM系统中只有唯一的一个实例对象,在就java开发过程中,很多场景下会碰到这种需求,所以单例模式也是最常用的设计模式之一,下面从以下几个方面对单例模式进行解说。

一、单例模式的概念:

需要设计一个类,达到的效果:在类的整个应用中指存在一个对象,如果把这个类当做是数据类型,把对象当做该类的一个具体的值时,也就意味着这个数据类型只有一个值

二、单例模式的特点

①这个类有且只有一个实例

②这个类必须自己创建这个实例对象

③这个类必须向外部提供它的这一个实例对象。

三、单例模式的设计思路:

构造器私有化     静态字段指向该类实例     静态方法返回该类实例

构造器私有化,这样外部就不能通过该类的构造方法创建该类对象

静态字段指向该类实例,同时要将这个字段私有化,这样外部就不能随意修改这个字段值,设置为静态外部才能通过该类类名可以取到这个对象

静态方法返回该类实例,一般在方法命名为getInstance(),这个方法是供外部使用的,所以要设置成public修饰的,同样需要设置成static类级别的,因为要让外部通过类名调用该方法

四、单例模式的几种实现方式:

(1)饿汉模式

在类加载的时候就创建好那个实例对象,不管需不需要那个实例对象都会创建对象,导致加载的时候会比较慢

代码如下:

//饿汉模式
class Singleton{
    //1.构造方法私有化
    private Singleton(){
    }
    //2.提供一个该类实例的字段并且私有化该字段,
    private static Singleton instance = new Singleton();
    //3.提供一个静态方法供外部使用获取到该类实例
    public static Singleton getInstance(){
        return instance;
    }
}

(2)静态代码块

在饿汉模式的基础上的加强,通过静态代码块来初始化实例对象,这个实例对象也是在类加载的时候创建的

代码如下:

//静态代码块
class Singleton{
    //1.构造方法私有化
    private Singleton(){
    }
    //2.提供一个该类实例的字段并且私有化该字段,
    private static Singleton instance;
    //3.通过静态代码块初始化字段值
    static{
        instance = new Singleton();
    }
    //4.提供一个静态方法供外部使用获取到该类实例
    public static Singleton getInstance(){
        return instance;
    }
}

(3)懒汉模式

在需要使用到这个实例对象的时候再去创建这个对象,但可能引起线程安全问题,同步synchronized同步代码块解决线程安全问题

代码如下:

class Singleton{
    //1.构造方法私有化
    private Singleton(){
    }
    //2.提供一个该类实例的字段并且私有化该字段,
    private static Singleton instance;
    //3.提供一个静态方法供外部使用获取到该类实例
    public static Singleton getInstance(){
        synchronized (Singleton.class) {
            if(instance == null)
                instance = new Singleton();
        }
        return instance;
    }
}

(4)枚举【推荐使用】

枚举:枚举是一个类型只有固定的几个值,当我们将枚举的值设置成一个,那就是单例模式

public class Test{
    //使用枚举,直接使用类名
    Singleton instance = Singleton.INSTANCE;
}
enum Singleton {
    INSTANCE;
}
(0)

相关推荐

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

    单例模式 线程安全的Singleton 会破坏Singleton的情况 线程级Singleton 单例模式是几个创建型模式中最独立的一个,它的主要目标不是根据客户程序调用生成一个新的实例,而是控制某个 ...

  • 枚举实现单例模式

    枚举实现单例模式

  • 设计模式笔记(一):Singleton 设计模式

    今天开始学习设计模式,借此机会学习并整理学习笔记. 设计模式是一门不区分语言的课程,什么样的编程语言都可以用到设计模式.如果说java语法规则比作武功招式的话,那么设计模式就是心法. 设计模式共有23 ...

  • 面试高频-吃透单例设计模式

    单例设计模式 单例设计模式的介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法). 比如 Hiber ...

  • 【转】C#设计模式-单例模式(Singleton Pattern)

    目录 介绍 第一个版本 --不是线程安全的 第二个版本 -- 简单的线程安全 第三个版本 - 使用双重检查锁定尝试线程安全 第四个版本 - 不太懒,不使用锁且线程安全 第五版 - 完全懒惰的实例化 第 ...

  • java常见设计模式之---单例模式

    java常见设计模式之---单例模式 1.单例模式简介 应用场景举例 2.单例模式的特点 3.单例模式和静态类 4.单例模式的经典实现 饿汉式单例(典型实现) 饿汉式-静态代码块 懒汉式单例创建,五种 ...

  • Singleton单例模式

    Singleton单例模式

  • 创建型模式之单例模式

    定义与特点 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成 ...

  • 图解Java设计模式之单例设计模式

    图解Java设计模式之单例设计模式 设计模式介绍 设计模式类型 单例设计模式介绍 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全,同步代 ...

  • 设计模式:单例模式 (关于饿汉式和懒汉式)

    定义 单例模式是比较常见的一种设计模式,目的是保证一个类只能有一个实例,而且自行实例化并向整个系统提供这个实例,避免频繁创建对象,节约内存. 单例模式的应用场景很多, 比如我们电脑的操作系统的回收站就 ...