一、应用场景
单例模式要求一个类有且仅有一个实例,并且提供一个全局的访问点。在我们需要用到生成唯一系列的场景下,可以使用此单例模式;在涉及到需要频繁创建实例,然后又销毁的对象上可以使用单例模式;需要在资源中互相通信的情况下,我们可以使用单例模式。单例模式的构造方法是私有的,这就杜绝了使用new方法来创建实例,提供了唯一的静态方法入口让外界调用。在方法里我们实现了单例。
二、优缺点
优点:实现了对唯一实例的访问控制
对于一些需要频繁创建、销毁的对象提高性能
缺点:不适用于变化频繁的对象
滥用单例会造成一些负面的影响。如在与数据库的连接池中使用了单例模式,就有可能出现连接池溢出,造成内存泄漏等。
三、具体代码
1、未优化前的单例模式
package com.wcb.beijing.singleton.old;
public class Emperor {
private static Emperor emperor = null;
private Emperor(){
}
public static Emperor getInstance(){
if (emperor == null){
emperor = new Emperor();
}
return emperor;
}
public static void emperorInfo(){
System.out.println("我是皇帝XXX...");
}
}
2、优化后的单例模式
package com.wcb.beijing.singleton.optimize;
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton(){
}
public static synchronized Singleton getInstance(){
return singleton;
}
}