单例模式

前言

在枚举中,我们可以让一个类生产固定个数的对象,在进行一步限制,一个类只允许产生唯一的一个对象就实现了单例模式
使用单例模式的目的在于避免频繁创建和销毁实例,减少内存开销
使用场景:
1.要求生产唯一序列号
2.计数器,不用每次刷新都在数据库里加一次,用单例对象先缓存起来
3.连接数据库的对象

使用

步骤
1.定义一个属性,保存当前类的静态对象(单例对象)
2.将构造方法私有化
3.创建一个静态get()方法返回这个单例对象

两种实现方式

懒汉式
创建实例化的过程放在get方法中,当需要单例对象时,调用get()方法才实例化
优点::使用时才创建实例,避免内存浪费
缺点::线程不安全,无法保证绝对的单例(可以加线程锁解决,但会降低执行效率)

public class Master {
    private String name;
    //懒汉式
    private static Master master;

    private Master(String name) {
        this.name = name;
    }

    public static Master getMaster(){
        if (master==null){
            System.out.println("单例对象被创建");
            master=new Master("张三");
        }
        return master;
    }
}

测试

 		Master m1= Master.getMaster();
        Master m2= Master.getMaster();
        Master m3= Master.getMaster();

结果

单例对象被创建

Process finished with exit code 0

只弹出一次单例对象被创建

饿汉式
直接在属性中实例化,类加载的时候单例对象就准备好了
优点:线程安全,而且执行效率高(使用枚举也可以方便实现单利模式,本质上也是饿汉模式)
缺点:不需要的时候也会创建实例,会导致内存浪费

public class Master2 {

    private String name;
    //饿汉式
    private static Master2 master = new Master2("张三");

    private Master2(String name) {
        this.name = name;
    }

    public static Master2 getMaster2(){
        return master;
    }

}

测试

 		Master2 m1 = Master2.getMaster2();
        System.out.println(m1.toString());
        Master2 m2 = Master2.getMaster2();
        System.out.println(m2.toString());
        Master2 m3 = Master2.getMaster2();
        System.out.println(m3.toString());

结果

com.pojo.Master2@4554617c
com.pojo.Master2@4554617c
com.pojo.Master2@4554617c

Process finished with exit code 0



本文若有错误请指正,互相学习,加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值