所谓单例模式就是在整个应用中只能创建该类的一个实例。
单例模式分为三种:懒汉式,饿汉式,登记式三种模式。
懒汉式代码示例:
Class A{
private static A aa;
private A(){}
synchronized public static A getInstence(){
if(A==null){
aa = new A();
}
return aa;
}
}
饿汉式代码示例:
Class B{
private static B bb = new B();
private B(){};
public static B getInstence(){
return bb;
}
}
登记式的思路就是建立一个protect的构造方法,一个私有的静态的hashmap,一个静态的程序段负责实例化,并将实例化后的对象放在hashmap之中。
一个静态的工厂方法。
点评:
1:以上三种方式在java中都可实现单例模式,但是前两种模式因为构造方法式私有的所以不能被继承,是一个缺陷。第三种方式虽然可以被继承,但是在继承之后,也就破坏了所谓的单例模式,因为子类实例化之后也是父类的实例,从严格意义上说有些违背了单例模式。
2:以上三种方式中只有懒汉模式可以在cpp中实现,因为在cpp中静态初始化,没有固定的顺序。