关于单例模式

单例模式的目的:

单例模式的目的和其他的设计模式的目的都是一样的,都是为了降低对象之间的耦合性,增加代码的可复用性,可维护性和可扩展性。

单例模式:

单例模式是一种常用的设计模式,用简单的言语说,单例模式就是一个类只包含一个实例对象,且该类能够自行创建该实例对象的一种设计模式。

单例模式的特点:

1.一个类里只有一个单例对象

2.类能够自行创建单例对象

3.能够保证内存里只有一份对象

4.单例模式设计一个全局的访问点

单例模式主要有两种模式:

1.饿汉模式

饿汉模式单例是指类在加载时就创建了一个单例对象,不管用没用到,先创建了再说,这就是饿汉模式。

简单单例模式实现:

java 复制代码
public class Singleton {
  //单例模式:饿汉模式

    private Singleton(){

    }
    private static Singleton singleton=new Singleton();//设为static,类在加载时就已经实例化
    public static Singleton getInstance(){
        return singleton;
    }
}

饿汉模式缺点:

由于饿汉模式是在类加载时就创建了实例对象,不管是否用到,这样的话虽然保证了在调用getInstance()方法之前一定已经存在单例对象,但是这样容易造成空间资源的浪费。

2.懒汉模式

懒汉模式单例是指先不创建实例对象,等需要用到时再创建实例对象。

懒汉模式简单实现:

java 复制代码
public class Singleton2 {
    //单例模式:懒汉模式

    private Singleton2(){

    }
    private static Singleton2 singleton2; //类加载时还没实例化

    public static Singleton2 getInstance(){

        if(singleton2 == null){
            singleton2=new Singleton2();
        }
        return singleton2;
    }
}

​​​

懒汉模式缺点:

懒汉模式是线程不安全的,在多线程的情况下,每个线程的运行结果都是不一样的

java 复制代码
public class Singleton2 {
    //单例模式:懒汉模式

    private Singleton2(){
        System.out.println(Thread.currentThread().getName()+"");
    }
    private static Singleton2 singleton2; //类加载时还没实例化

    public static Singleton2 getInstance(){

        if(singleton2 == null){
            singleton2=new Singleton2();
        }
        return singleton2;
    }
    public static void main(String[] args) {

        for(int i=0;i<5;i++){
   //lambda表达式创建匿名类对象
            new Thread(()->{
                Singleton2.getInstance();
            }).start();
        }
    }
}
相关推荐
Cult Of10 小时前
单例模式与线程池的实际应用
单例模式
YuanlongWang10 小时前
C# 设计模式——单例模式
单例模式·设计模式·c#
情深不寿3175 天前
C++特殊类的设计
开发语言·c++·单例模式
林开落L7 天前
线程进阶:线程池、单例模式与线程安全深度解析
linux·安全·单例模式·线程池
岁岁岁平安7 天前
Java的双重检查锁机制(DCL)与懒加载的单例模式
java·单例模式·synchronized·
为java加瓦10 天前
单例模式:原理、实现与演进
单例模式
磨十三10 天前
C++ 单例模式(Singleton)详解
c++·单例模式
默默coding的程序猿10 天前
1.单例模式有哪几种常见的实现方式?
java·开发语言·spring boot·spring·单例模式·设计模式·idea
程序员Aries14 天前
从零开始实现一个高并发内存池_DayThree:内存池整体框架与ThreadCache、TLS无锁访问
c++·学习·单例模式
爱奥尼欧14 天前
【Linux】系统部分——线程安全与线程的单例模式
linux·安全·单例模式