该模式有1个成员:单例模式工厂
单例模式分两种类型:饿汉模式、懒汉模式
饿汉模式
package model04.single.factory;
public class HungrySingle{
private static HungrySingle single = new HangrySingle();
private HungrySingle(){}
public static HungrySingle getInstance(){
return single;
}
}
懒汉模式
package model04.single.factory;
public class LazySingle{
private static LazySingle single = null;
private LazySingle(){}
public static synchronized LazySingle getInstance(){
if(single == null){
single = new LazySingle();
}
return single;
}
}
两种单例模式的区别:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建
单例模式的优缺点
优点
1:使用合适的中间件,可以把singleton模式扩展为跨多个JVM和多个计算机工作
2:只需把一个类的构造函数变成私有的,并且在其中增加相应的静态函数和变量,就可以把这个类变为singleton
3:给定一个类,可以创建它的一个singleton子类
4:如果singleton从未使用过,那么就绝不会创建它
缺点
1:没有好的方法去摧毁一个singleton,或者解除其责任2:从singleton派生的类并不是singleton。如果要使其成为singleton,必须要增加所需的静态函数和变量
3:每次调用instance方法都会执行if语句,多余
4:singleton的使用者知道它们正在使用一个singleton ,因为它们必须要调用instance方法。