关于单例模式

单例模式的目的:

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

单例模式:

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

单例模式的特点:

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();
        }
    }
}
相关推荐
孟秋与你1 天前
【spring】spring单例模式与锁对象作用域的分析
java·spring·单例模式
程序员奇奥1 天前
设计模式——简单工厂模型、工厂模式、抽象工厂模式、单例模式、代理模式、模板模式
单例模式·设计模式·抽象工厂模式
p-knowledge2 天前
单例模式(Singleton Pattern)
单例模式
oioihoii2 天前
单例模式详解
c++·单例模式·c#·大学必学
春风十里不如你95272 天前
【设计模式】【创建型模式(Creational Patterns)】之单例模式
java·单例模式·设计模式
沐凡星4 天前
单例模式(Singleton)
开发语言·算法·单例模式
南城花随雪。4 天前
Mybatis框架之单例模式 (Singleton Pattern)
单例模式·mybatis
水w5 天前
单例模式的几种实现方式
java·开发语言·jvm·单例模式·单例
Atlasgorov5 天前
JAVA_单例模式
java·开发语言·单例模式
捕鲸叉5 天前
C++单例模式与多例模式
开发语言·c++·单例模式