当前位置:   article > 正文

Java重修笔记 第二十二天 单例模式、饿汉式和懒汉式

Java重修笔记 第二十二天 单例模式、饿汉式和懒汉式
  • 单例模式

        定义:在整个系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的静态方法,有懒汉式和饿汉式两种。

  • 饿汉式

        实现步骤:

        1. 构造器私有化(防止直接new出对象,对象只能从静态方法的返回值中得到)

        2. 静态成员初始化该类的对象

        3. 向外暴露一个静态的公共方法,用来返回该静态属性的对象

  1. class GF{
  2. private String name;
  3. // 静态成员初始化该类的对象
  4. private static GF gf = new GF("123");
  5. // 将构造器私有化
  6. private GF(String name) {
  7. this.name = name;
  8. }
  9. // 向外暴露一个静态的公共方法,用来返回该静态属性的对象
  10. public static GF getInstance() {
  11. return gf;
  12. }
  13. }

可以看出,饿汉式即便没有使用到对象实例,但随着类的加载它也会帮你创建好一个对象实例

  • 懒汉式

        实现步骤:

        1. 构造器私有化(防止直接new出对象,对象只能从静态方法的返回值中得到)

        2. 静态成员声明该类的对象但不初始化

        3. 向外暴露一个静态的公共方法,用来初始化该类的对象并返回

  1. class MF {
  2. private String name;
  3. // 静态成员声明该类的对象但不初始化
  4. private static MF mf;
  5. // 将构造器私有化
  6. private MF(String name) {
  7. this.name = name;
  8. }
  9. // 向外暴露一个静态的公共方法,用来初始化该类的对象并返回
  10. public static MF getInstance() {
  11. if (mf == null) {
  12. return new MF("321");
  13. }
  14. return mf;
  15. }
  16. }

这样就避免了类加载后直接就会创建对象的问题,懒汉式什么时候调用,就什么时候创建对象。

总结:懒汉式和饿汉式的区别是创建对象的时机不一样,饿汉式是直接在静态属性声明后直接初始化创建对象(即类加载便创建对象),懒汉式是声明但不创建对象,把创建对象的过程放到了方法里(什么时候调用静态方法什么时候创建对象)

饿汉式不存在线程安全问题,懒汉式存在线程安全问题(可能会有多个线程一起执行new操作)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/849754
推荐阅读
相关标签
  

闽ICP备14008679号