单例模式
(1)什么是单例模式?
用来确保整个应用当中某个类只有一个实例的模式。
(2)什么时候使用单例模式?
在一个应用当中,经常有一些资源(比如网络连接、数据库连接、线程等等)需要管理,这些资源是有限的,只需要保持一份,这时就可以使用单例模式来解决这样的问题。
(3)代码实现:
1)懒汉式写法:
/**
* 懒汉式单例模式
*/
public class Well {
//well用来保存Well实例
private static Well well;
/**
* 构造器私有化,这样,外界就没有办法
* 直接调用构造器来创建该类的实例。
*/
private Well(){
System.out.println("Well's constructor()");
}
/**
* 对外界提供一个公开方法,用于获取其实例。
*/
public synchronized static Well getInstance(){
if(well == null){
well = new Well();
}
return well;
}
}
2)饿汉式写法:
/**
* 饿汉式单例模式
*/
public class Well2 {
private static Well2 well = new Well2();
private Well2(){
System.out.println("Well2's constructor()");
}
/**
* 对外界提供一个公开方法,用于获取其实例。
*/
public static Well2 getInstance(){
return well;
}
}
3)懒汉式与饿汉式写法的区别:
懒汉式写法不会有资源浪费的问题,但是需要处理线程安全问题;饿汉式写法虽然不用考虑线程安全问题,但是有可能造成资源的浪费。