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

avatar
作者
猴君
阅读量:2
  • 单例模式

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

  • 饿汉式

        实现步骤:

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

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

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

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

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

  • 懒汉式

        实现步骤:

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

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

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

class MF {      private String name;      // 静态成员声明该类的对象但不初始化     private static MF mf;      // 将构造器私有化     private MF(String name) {         this.name = name;     }      // 向外暴露一个静态的公共方法,用来初始化该类的对象并返回     public static MF getInstance() {         if (mf == null) {             return new MF("321");         }         return mf;     }  }

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

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

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!