单例模式的理解及应用

单例模式

单例模式定义:定义:确保某个类只有一个实例,而且自行实例化提供给外部使用。
单例模式有很中比较常用的有懒汉模式和饿汉模式。注:我在网上查说的比较多的模式,在项目中比较常看到的有懒汉模式。饿汉模式没怎么看过。

懒汉模式:

public class SingleTon {
    //声明私有化
    private static SingleTon singleTonInstance;
    //将构造函数私有化
    private SingleTon() {
    }
    //懒汉式
    private static synchronized SingleTon getInstance(){
        if (null==singleTonInstance){
            singleTonInstance = new SingleTon();
        }
        return singleTonInstance;
    }
}

优点:用到的时候才会去实例化,在一定程度上节约了资源。

缺点:getInstance方法是用synchronized修饰的,该方法是同步的,为了保证线程安全,但是导致每次调用该方法的时候都会被同步,这样会消耗不必要的资源(不必要的同步开销)。所以这种模式一般不建议使用。。

饿汉模式:

public class SingleTon {
    //将构造函数私有化
    private SingleTon() {
    }

    //创建私有实例对象
    private static final SingleTon singleTonInstance = new SingleTon();

    //对外提供方法,返回实例对象
    public static SingleTon getInstance() {
        return singleTonInstance;
    }

优点:简单,线程安全。

缺点:实例对象是static的,在声明的时候就实例化了,浪费资源。
PS:还有一个双重锁定模式就是在懒汉模式添加一层synchronized。实例控制:Singln 会阻止其他对象实例化其自己的 Singln 对象的副本,从而确保所有对象都访问唯一实例
灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程

总结

在单例模式中构造方法必须写的,而且构造方法必须去私有化。因为单例模式只会去实例化一次,不写构造方法在java中会默认生成一个共有的构造方法。那样的话就不是单例模式了。在构造方法中尽量不要去初始化参数,可以写init方法代替进行初始化。构造方法初始化值会很麻烦(听说的)。饿汉模式使用大多数情况是在多线程的情况下去使用的。
单例模式调用方法:类.getInstance().方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值