关于单例模式

单例模式的目的:

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

单例模式:

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

单例模式的特点:

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();
        }
    }
}
相关推荐
重生之我在字节当程序员2 天前
如何实现单例模式?
单例模式
夕泠爱吃糖2 天前
如何实现单例模式?
单例模式
m0_607548762 天前
什么是单例模式
开发语言·javascript·单例模式
Am心若依旧4092 天前
[c++进阶(三)]单例模式及特殊类的设计
java·c++·单例模式
因特麦克斯2 天前
如何实现对象的克隆?如何实现单例模式?
c++·单例模式
狐拾叁4 天前
设计模式-创建者模式-单例模式(java版)
java·单例模式·设计模式
benben0444 天前
Unity3D仿星露谷物语开发5之角色单例模式
unity·单例模式·游戏引擎
Mr.135 天前
如何实现对象的克隆?如何实现单例模式?
c++·单例模式
missu2175 天前
C++中如何实现单例模式?
开发语言·c++·单例模式
行走的生活5 天前
为什么要用单例模式?
单例模式