标签:
单例设计模式:(Singlelon)
如果没有构造方法,会在编译时候自动构造一个什么都不干的构造方法
如果构造方法私有化,则外部不能使用 new 关键字实例化对象。
class Singleton{
static Singleton instance = new Singleton() ;
public void print(){
System.out.println("Hello") ;
}
}
public class Test{
public static void main(String arg[]){
Singleton s = null;
s = Singleton.instance ;
s.print() ;
}
}
但是这样不符合类的封装性
所以需要用 private修饰instance
class Singleton{
private static Singleton instance = new Singleton() ;
public void print(){
System.out.println("Hello") ;
}
public static Singleton getInstance(){
return instance ;
}
}
public class Test{
public static void main(String arg[]){
Singleton s = null;
s = Singleton.getInstance() ;
s.print() ;
}
}
但是现在无论
S1 = Singleton.getInstance();
S2 = Singleton.getInstance();
S3 = Singleton.getInstance();
得到的都是同一个实例。
如果要控制一个类的实例化个数,那么就要锁定构造方法!!!
但是如果现在将getInstance方法中变为
Return new Singleton();也是有点小缺陷的
所以程序要这么写:
class Singleton{
private static final Singleton INSTANCE = new Singleton() ;
public void print(){
System.out.println("Hello") ;
}
public static Singleton getInstance(){
return INSTANCE ;
}
}
public class Test{
public static void main(String arg[]){
Singleton s = null;
s = Singleton.getInstance() ;
s.print() ;
}
}
可是对于单例设计模式有两种模式:
之前写的就是饿汉式,在Singleton定义的时候就准备好了一个对象,并没有关系这个对象有没有使用,懒汉式的特点是第一次使用 的时候实例化,以后都不实例化。
懒汉式:
class Singleton{
private static final Singleton instance ;
public void print(){
System.out.println("Hello") ;
}
public static Singleton getInstance(){
if(instance == null)
return new Singleton() ;
else
return instance ;
}
}
public class Test{
public static void main(String arg[]){
Singleton s = null;
s = Singleton.getInstance() ;
s.print() ;
}
}
标签:
原文地址:http://www.cnblogs.com/da-peng/p/5129777.html