单例模式与工厂模式
1.懒汉式单例模式,线程安全
是否 Lazy 初始化:是
是否多线程安全:是
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
public class singleton{
private static singleton instance;
private singleton (){}
public static syncronized singleton getinstance(){
if (instance==null){
instance= new singleton();
}
return instance;
}
}
2.饿汉式单例模式
是否 Lazy 初始化:否
是否多线程安全:是
优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。
public class singleton{
private static instance=new singleton();
private singleton(){}
public static singleton getinstance(){
return instance;
}
}
3.工厂模式
优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。