java设计模式——单例模式
一.概述
单例模式是指一个类在内部创建一个静态实例供外部调用,并且在整个程序运行过程中,也只会存在这一个实例。
二.应用场景
在我们开发程序时,涉及到数据库连接,三方支付接口,线程池、缓存、计数器、进度条、打印机等情况时候,常常都会用到单例模式。
#三.代码演示:#
1.最简单的单例模式(饿汉式):
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
public void printMsg(){
System.out.println("This is a Singleton");
}
}
从上面例子可以看出,每次调用Singleton.getInstance()时,返回的便是instance,而instance只在加载类Singleton时初始化一次,不会每调用一次,new一次。但是,不管会不会调用该实例,都先创建出来未免有些浪费资源,因此,下面我们介绍懒汉式单例。
2.懒汉式
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton(){}
public static LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
public void printMsg(){
System.out.println("This is a LazySingleton");
}
}
懒汉式在调用的第一次才创建实例,这样避免了饿汉式的浪费资源,但是,如果多个线程在同一时间调用该单例时,就可能会创建多个实例,那么,如何创建线程安全的单例呢?请看下面代码:
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton(){}
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
public void printMsg(){
System.out.println("This is a LazySingleton");
}
}