单例模式

单例模式

所谓类的单例模式,就是采取一定办法,保证对整个软件系统中,某个类只能存在一个对象实例。 单例模式主要分为懒汉式和饿汉式

单例模式是指当需要某个类的实例化的对象时直接通过类·get方法得到已经实例化的对象 具体实例化的过程在类内部完成,其核心思想是:

在类内部将构造器私有化,使得实例化只能在类内部完成,先创建静态型属性,并给出一个public类型的静态的get方法返回实例化的对象

根据实例化的先后顺序分为懒汉式和饿汉式,

懒汉式是在先不调用构造器创建对象,在需要实例时再创建;饿汉式是在最开始就创建出实例化的对象,然后直接等待被调用

饿汉式

  • 1:先将实例创建起来,无论是否需要此实例,先创建出来等待被调用(一定要用static修饰)
  • 2:将构造器私有化,防止其他类在外面创建
  • 3:将实例化的对象返回,(一定要用static修饰)
  • 代码示例:
class Singleton1 {
    //饿汉式
    //1:先将实例创建起来,无论是否需要此实例,先创建出来等待被调用(一定要用static修饰)
    public static Singleton1 instance=new Singleton1();
    //2:将构造器私有化,防止其他类在外面创建
    private Singleton1() {
    }
    //3:将实例化的对象返回,(一定要用static修饰)
    public static Singleton1 getInstance() {
        return instance;
    }
}

懒汉式 —线程不安全

  • 1:创建一个Singleton2类型的空变量(未实例化),(一定要用static修饰)
  • 2:将构造器私有化,防止其他类在外面创建
  • 3:需要实例时,判断当前对象是否已经被实例化,若为被实例化则先实例化最开始创建的变量,再返回对象;若已经实例化则直接返回对象,此优点是只有在需要实例时才会创建实例,不需要实例时只有一个null值的instance属性
    代码示例:
class Singleton2{
    //懒汉式      ---线程不安全
    //1:创建一个Singleton2类型的空变量(未实例化),(一定要用static修饰)
    public static Singleton2 instance=null;
    //2:将构造器私有化,防止其他类在外面创建
    private Singleton2(){
    }
    //3:需要实例时,判断当前对象是否已经被实例化,若为被实例化则先实例化最开始创建的变量,再返回对象;
    // 若已经实例化则直接返回对象,此优点是只有在需要实例时才会创建实例,不需要实例时只有一个null值的instance属性
    public static Singleton2 getInstance() {
        if (instance==null){
            instance=new Singleton2();
        }
        return instance;
    }
}

懒汉式 —线程安全

  • 1:创建一个Singleton2类型的空变量(未实例化),(一定要用static修饰)
  • 2:将构造器私有化,防止其他类在外面创建
  • 3:需要实例时,判断当前对象是否已经被实例化,若为被实例化则先实例化最开始创建的变量,再返回对象;若已经实例化则直接返回对象,此优点是只有在需要实例时才会创建实例,不需要实例时只有一个null值的instance属性;加锁
    synchronized 才能保证单例线程安全
class Singleton3 {
    //1:创建一个Singleton2类型的空变量(未实例化),(一定要用static修饰)
    private static Singleton3 instance=null;
    //2:将构造器私有化,防止其他类在外面创建
    private Singleton3 (){
    }
    //3:需要实例时,判断当前对象是否已经被实例化,若为被实例化则先实例化最开始创建的变量,再返回对象;
    // 若已经实例化则直接返回对象,此优点是只有在需要实例时才会创建实例,不需要实例时只有一个null值的instance属性
    // 加锁 synchronized 才能保证单例线程安全
    public static synchronized Singleton3 getInstance() {
        if (instance == null) {
            instance = new Singleton3();
        }
        return instance;
    }
}

**

饿汉式和懒汉式的优缺点

**

  • 饿汉式:

优点:饿汉式是线程安全的
缺点:对象加载时间过长,从类开始到类结束时一直存在

  • 懒汉式:

优点:延迟对象的创建
缺点:可能线程不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再做两道题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值