单例设计模式
在程序运行过程中,某个类的对象只允许被创建一次
例如:播放器的播放窗口,单点登录
1.单例模式的实现过程:※※※
- 1.构造方法私有
- 2.声明静态的,当前类类型的属性
- 3.声明静态方法: 返回值:当前类类型 方法体内:判断第2步的静态属性是否为null
2.[深入分析单例模式]
根据new的时机不同,分为:
- 懒汉模式
- 饿汉模式
3.懒汉模式:
在程序运行后,并没有立即去判断play是否为null,并创建对象,而是在执行到getInstance()
方法时,才去判断并创建
package cn.cc.ex1;
/**
* @author CC
* 单例模式
* 懒汉模式实现
*/
public class Play {
//1.构造方法私有
private Play() {
}
//2.声明静态的当前类类型的属性
private static Play play;
public static Play getInstance() {
//3.判断静态属性play是否为null
if (play==null) {
//4.如果为null,创建对象
play = new Play();
}
return play;
}
}
测试类:
package cn.cc.ex1;
/**
* @author CC
* 单例模式
* 懒汉模式实现单例
*/
public class Test01 {
public static void main(String[] args) {
//通过单例模式得到Play的对象
Play play = Play.getInstance();
Play play1 = Play.getInstance();
//两个对象的地址一样,所以只创建了一个对象
System.out.println(play);
System.out.println(play1);
}
}
4.饿汉模式:
在程序运行后,立即new 创建对象
package cn.cc.ex1;
/**
* @author CC
* 单例模式
* 恶汉模式实现单例
*/
public class Play2 {
//1.构造方法私有
private Play2() {
}
//2.声明静态的 当前类类型的变量后,进行new
private static Play2 play = new Play2();
//3.创建方法
public static Play2 getInstance() {
return play;
}
}
测试类:
package cn.cc.ex1;
/**
* @author CC
* 单例模式
* 恶汉模式实现单例
*/
public class Test02 {
public static void main(String[] args) {
Play2 play = Play2.getInstance();
Play2 play1 = Play2.getInstance();
System.out.println(play);
System.out.println(play1);
}
}
5.两种模式的选择:
- 如果使用单例对象比较频繁,且在程序运行后立刻就使用单例对象,建议使用饿汉模式
- 如果使用单例对象的频率较低,为了节省内存空间,建议使用懒汉模式