单例模式之饿汉式与懒汉式
// 跟着老韩学java的笔记 , 老师的视频连接
韩顺平java
- 什么是单例模式?
- 采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类智能提供一个取得其对象实例的方法。
- 单例模式有两种方式
- 饿汉式
- 构造器私有化 =》防止用户new
- 类的内部创建对象。
- 向外暴露一个静态的公共方法。
- 代码实现
package com.Arr; public class single { public static void main(String[] args) { girlFriend gf= girlFriend.getInstance(); girlFriend gf2= girlFriend.getInstance(); System.out.println(gf==gf2); //true // System.out.println(gf2); } } class girlFriend{ private String name; private static girlFriend gf=new girlFriend("xiaohong"); private girlFriend(String name ){ this.name=name; } public static girlFriend getInstance(){ return gf; } }
- 懒汉式
package com.Arr; public class single { public static void main(String[] args) { girlFriend gf= girlFriend.getInstance("海海"); girlFriend gf2= girlFriend.getInstance("海海"); System.out.println(gf==gf2); //true // System.out.println(gf2); } } class girlFriend{ private String name; private static girlFriend gf; private girlFriend(String name ){ this.name=name; } public static girlFriend getInstance(String name){ if( gf==null){ gf=new girlFriend(name); } return gf; } }
- 饿汉式
总结:
- 二者最主要的区别在于创建对象的时机不同:
- 饿汉式是在类加载时就创建了对象实例。
- 懒汉式是在使用时才创建。
- 饿汉式不存在线程安全问题,懒汉式存在线程安全问题
- 饿汉式存在浪费资源的可能。
- javaSE 标准类中,java.lang.Runtime 就是经典的单例模式。