关于单例模式

单例模式的目的:

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

单例模式:

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

单例模式的特点:

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();
        }
    }
}
相关推荐
程序员小寒15 小时前
JavaScript设计模式(一):单例模式实现与应用
javascript·单例模式·设计模式
.select.17 小时前
C++ 单例模式
java·c++·单例模式
bbq粉刷匠1 天前
Java--多线程--单例模式
java·开发语言·单例模式
砍光二叉树2 天前
【设计模式】创建型-单例模式
单例模式·设计模式
魑魅魍魉都是鬼2 天前
Android:java kotlin 单例模式
android·java·单例模式
biter down2 天前
C++ 单例模式:饿汉与懒汉模式
开发语言·c++·单例模式
mingshili3 天前
[架构设计] 依赖注入优于单例模式
单例模式·架构设计
一只大袋鼠3 天前
并发编程(二十三):单例模式(二):静态/非静态方法:单例内存优化关键
java·单例模式·并发编程
一叶飘零_sweeeet3 天前
volatile 关键字深度拆解:从内存屏障底层到单例模式的工业级架构设计
单例模式·volatile
一只大袋鼠3 天前
并发编程(二十四):单例模式(三):构造方法私有:单例模式的 “第一道防线”
java·单例模式·并发编程