单例模式: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
使用场景: 1. 系统中读取xml 或者 properties 的时候,可以先写一个文件配置的类,然后用流方法读取配置文件信息, 存在问题: 1.多次去存取配置文件,严重浪费内存。
解决思路: 1.类的构造器是公用的,可以在外部创建多个实例,可以改为private 在类内部自己创建自己的实例。 然后再创建一个公用的入口。
单例模式实例代码:
一,懒汉式: package sigle;
/**
* 懒汉式的单例实现方式
* Created with IntelliJ IDEA.
* User: hp
* Date: 13-9-15
* Time: 下午9:53
*/
public class SlobSingleton {
* 创建一个变量来存储创建好的类实例
*/
private static SlobSingleton slobSingleton = null;
* 私有的构造函数,可以在内部控制创建实例的数目
*/
private SlobSingleton(){
slobSingleton = new SlobSingleton();
}
return slobSingleton;
}
SlobSingleton singleton1 = SlobSingleton.getSlobSingleton();
SlobSingleton singleton2 = SlobSingleton.getSlobSingleton();
System.out.println(singleton1);
System.out.println(singleton2);
}
}
package sigle;
* Created with IntelliJ IDEA.
* User: hp
* Date: 13-9-15
* Time: 下午10:07
*/
public class HungrySingleton {
* 定义一个变量来存储创建好的实例变量,这里直接创建类变量,只能创建一次
*/
private static HungrySingleton hungrySingleton = new HungrySingleton();
public static HungrySingleton getHungrySingleton(){
return hungrySingleton;
}
HungrySingleton hungrySingleton1 = HungrySingleton.getHungrySingleton();
HungrySingleton hungrySingleton2 = HungrySingleton.getHungrySingleton();
System.out.println(hungrySingleton2);
System.out.println(hungrySingleton1);
}
只要加上synchronized 即可。
}
可以考虑用双重检查加锁
* 懒汉式的线程安全实现
* Created with IntelliJ IDEA.
* User: hp
* Date: 13-9-15
* Time: 下午11:23
*/
public class SafeSingleton {
synchronized(SafeSingleton.class){
if (null == safeSingleton){
return new SafeSingleton();
}
}
}
}
}