1.单例设计模式
1.两种单例
a.饿汉单例,代码如下:
public class Emperor {
private static final Emperor emperor =new Emperor(); //初始化一个皇帝 (饿汉)
private Emperor()
{ //世俗和道德约束你,目的就是不希望产生第二个皇帝 }
public static Emperor getInstance()
{ return emperor; } //皇帝发话了
public static void say()
{ System.out.println("我就是皇帝某某某...."); }
//类中其他方法,尽量是static
public static void doSomething(){
}
}
b.懒汉单例模式,代码如下:
public class Singleton
{ private static Singleton singleton = null; //限制产生多个对象
private Singleton(){ } //通过该方法获得实例对象
public static synchronized Singleton getSingleton() // synchronized是为了解决线程安全问题
{
if(singleton == null){ singleton = new Singleton(); }
return singleton;
}
}
2.优点:
2.1 由于单例模式在内存中只有一个实例,减少了内存开支
2.2 由于单例模式只生成一个实例,所以减少了系统的性能开销
2.3 单例模式可以避免对资源的多重占用,例如一个写文件动作,由于只有一个实例存在
内存中,避免对同一个资源文件的同时写操作
2.4单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单
例类,负责所有数据表的映射处理。
3.缺点
3.1 单例模式没有接口,所以扩展很困难
3.2 单例模式违背了单一职责原则(一个类应该只实现一个逻辑)
3.3 单例模式对测试不利 ,在并行开发环境中,如果单例模式没有完成,是不能进行 测试的
补充:在Spring中,每个Bean默 认就是单例的,这样做的优点是Spring容器可以管理这些Bean的生命期,决定什么时候创建 出来,什么时候销毁,销毁的时候要如何处理,等等。如果采用非单例模式(Prototype类 型),则Bean初始化后的管理交由J2EE容器,Spring容器不再跟踪管理Bean的生命周期。