关于单例模式

单例模式的目的:

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

单例模式:

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

单例模式的特点:

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();
        }
    }
}
相关推荐
拉里小猪的迷弟3 小时前
设计模式-创建型-常用:单例模式、工厂模式、建造者模式
单例模式·设计模式·建造者模式·工厂模式
Lindsay.Lu丶4 小时前
valgrind & 单例模式的自动释放(多线程)
单例模式
GGBondlctrl3 天前
【JavaEE初阶】深入解析单例模式中的饿汉模式,懒汉模式的实现以及线程安全问题
单例模式·设计模式·饿汉模式·懒汉模式·懒汉模式线程安全问题
清风拂山感3 天前
设计模式之单例模式
javascript·单例模式·设计模式
陌上之殇3 天前
C++实现单例模式
c++·单例模式
冷白白3 天前
【C++】单例模式
开发语言·c++·单例模式·c
枪哥玩转嵌入式4 天前
大佬,简单解释下“嵌入式软件开发”和“嵌入式硬件开发”的区别
单片机·单例模式·51单片机
It'sMyGo4 天前
js设计模式-工厂模式 单例模式 观察者模式 发布订阅模式 原型模式 代理模式 迭代器模式
观察者模式·单例模式·设计模式
我与岁月的森林5 天前
继承实现单例模式的探索(二)
单例模式·c#
小狗爱世界5 天前
常用设计模式之单例模式、策略模式、工厂模式
单例模式·设计模式·策略模式