设计模式之单例模式的作用以及两种实现方式

1、作用:

只产生单一实例对象。

举例来说:就是为了只产生单一系列的产品。如冰箱类,此时单例是只产生某种具体型号类型的冰箱。


2、单例模式的两种方式

1.懒汉模式

1.1线程安全的懒汉模式

public class Singleton{
private static Singleton instance; //权限须为私有。此时只有一个引用,并没有实例化
    private Singleton() {//私有无参的构造函数
    }
    public static SingletongetInstance() {//静态的方法
        if(instance==null){
               //synchronized锁在方法执行前,不是加在方法上,所以此时就不用每次执行获取实例方法的时候都锁住此方法,且在之后的获取过程中都不用执行锁住的代码,提高效率
            synchronized("demo") {//同步,并发;引号内容任意或 synchronized(Singleton.class)
                instance=new Singleton();
                return instance;
            }
        }else{
            return instance;
        }
    }
}

特点:当只有第一次使用的时候才实例化,加载类的速度快,但是获取对象的速度慢;需要考虑线程并发

1.2线程不安全的懒汉模式

public class Singleton{
private static Singleton instance; //权限须为私有。此时只有一个引用,并没有实例化
    private Singleton() {//私有无参的构造函数
    }
    public static SingletongetInstance() {//静态的方法
        if(instance==null){
            instance=new Singleton();//当有多个线程都执行在此处时,就会执行多次
            return instance; //当 有多个线程都 执行 在此处时,就会执行多次
        }else{
            return instance;
        }
    }
}

特点:当只有第一次使用的时候才实例化,加载类的速度快,但是获取对象的速度慢;

2.饿汉模式

public class Singleton{
    private static Singleton instance = new Singleton(); //实例化一个对象
    private Singleton(){//私有无参的构造函数
    }
    public static SingletongetInstance(){
        return instance;
    }
}

特点:

加载类的速度慢,但是获取对象的速度快;不需要考虑线程并发

不用的时候占用内存


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值