单例设计模式
一、概念
1、设计模式
就是在实际编程过程中,逐渐总结出的一些解决问题的套路。
2、单例设计模式
在整个软件系统运行过程中,这个类只被实例化一次,只有一个实例(实例化对象)。以后不论在哪都只调用这一个实例。
例如:实例化对象的创建要消耗大量的时间和资源。
//Single.java
public class Single{
public Single(){
//假设构造中要执行1000行代码,要占用很大的资源,耗时很长(10s)
//每一次new Single对象需要10s,运行1000行代码
//像这种情况,就适合使用单例模式,只new一次对象,以后就一直使用这个对象
}
}
- 使用单例模式解决什么问题?一般都是new对象太费劲,或者频繁的new对象没必要
二、单例(Singleton)设计模式——饿汉式
//Single.java
public class Single{
//私有的构造,构造方法私有化,调用这个类的人就不能直接使用new来创建对象
private Single(){
}
//私有的Single类型的类变量
private static Single single = new Single();
public static Single getInstance(){
return single;
}
}
//Test.java+
Single s = new Single();//编译报错
Single single //编译报错
Single s = Single.getInstance();
三、单例(Singleton)设计模式——懒汉式
最开始,对象时null,直到有第一个人调用,才new一个对象,之后所有调用的都用这个对象
//Single1.java
//懒汉式的单例模式
public class Single1{
//先私有化构造方法,让外边不能直接new对象
private Single1(){
}
private static Single1 s1 = null;
public static Single1 getInstance(){
if(s1 == null){
s1 = new Single1();
}
return s1;
}
}
//Test.java
Single1 s = Single1.getInstance();
Single1 s1 = Single1.getInstance();
Single1 s2 = Single1.getInstance();
Single1 s3 = Single1.getInstance();
Singl1e s4 = Single1.getInstance();
四、饿汉式和懒汉式区别
- 单例模式,软件的运行有且仅有一个实例化对象
- 饿汉式和懒汉式的区别:
就是什么时候new这个对象- 懒汉式:
- 在第一次有人调用getInstance方法时来new对象,以后再有人调用getInstance方法就直接返回之前第一次new好的对象
- 饿汉式:
- 在类加载之后,还没有人调用的时候,就先new一个对象,以后不论谁来调用getInstance方法,都是直接返回之前new好的那个对象
- 懒汉式: