转载于:点击打开链接
单例模式实现步骤:
1.把构造方法私有化
2.惟一的一个实例,加上private、static属性
3.对外提供获取该类对象的公有方法也加static属性,涉及到线程安全问题可以使用synchronized关键字修饰共有方法
主要优点:
1、提供了对唯一实例的受控访问。
2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。
3、允许可变数目的实例。
使用场景:
1任务管理器就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗?
2(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
3. 网站的计数器,一般也是采用单例模式实现,否则难以同步。
4. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。
5. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。
。。。。。
package zll.material.singleton;
/**
* 懒汉式
* @author Administrator
*
*/
public class Singleton1 {
private static Singleton1 instance = null;
private Singleton1() {
// TODO Auto-generated constructor stub
}
public static synchronized Singleton1 getInstance(){
if(instance==null){
instance = new Singleton1();
}
return instance;
}
}
package zll.material.singleton;
/**
* 饿汉式
* @author Administrator
*
*/
public class Singleton2 {
private static Singleton2 instance = new Singleton2();
private Singleton2() {
// TODO Auto-generated constructor stub
}
public static Singleton2 getInstance(){
return instance;
}
}
package zll.material.singleton;
/**
* 双重检查锁定
* @author Administrator
*
*/
public class Singleton3 {
private static volatile Singleton3 instance = null;
private Singleton3() {
// TODO Auto-generated constructor stub
}
public static synchronized Singleton3 getInstance(){
if(instance==null){
synchronized (Singleton3.class) {
if (instance==null) {
instance = new Singleton3();
}
}
}
return instance;
}
}