Java单例模式


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

饿汉式的代码实现

在这里插入图片描述

懒汉式实例化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单例模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于单例模式的常见问题

1、public static SingletonOne getInstance() {}
a. 该方法为什么用静态的?为什么要用这个类的类型作为返回值?
b. 只能叫这个名字么?

a、getInstance()方法的作用是实现该类对象的返回,因此需要设置该类类型作为方法返回值;至于static,则是因为对于单例模式而言,需要在类外能在无需产生对象实例的情况下,完成这个方法的调用,因此该方法需要设置为static。

b、方法名并不限定,只是一种推荐命名,见名知义。

2、关于对象实例化、对象引用、对象声明的关系

完整的对象实例化的过程,可以分为声明和实例化两部分,这两步可以拆分也可以整合。

譬如:
在这里插入图片描述


在这里插入图片描述

结合这段代码,one表示对象名,也可称为对象引用。

3、不是说,单例模式只能有一个对象吗,为什么在测试类里出现了两个SingletonOne的对象也不报错呢?
在这里插入图片描述

所谓单例模式只能有一个对象,是指无论应用该类型产生多少对象,都是指向唯一的堆空间,所以测试类中,只是声明了两个对象的引用指向了同一内存空间,不会报错。

4、单例模式中的类成员是否需要加final修饰?

从语法层面来说:

饿汉式:加入final修饰对于模式实现本身无影响

在这里插入图片描述
懒汉式:加入final修饰产生编译报错,提示信息为:无法对final修饰的成员进行操作。

原因是,final修饰的静态成员,如果在定义时未进行实例化,则需要在静态代码块中去实现,而不能到类方法中才进行实例化。
在这里插入图片描述
在这里插入图片描述

从应用层面来说:

如果饿汉式的程序代码中不仅涉及创建对象及返回的功能,还包括其他的功能,譬如资源回收等,就不能假如final修饰,会影响程序功能实现。

总结:

懒汉式中不能加入final。

如果在饿汉式代码中,对类实例只涉及创建和返回方法,可以加入final修饰。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值