如果我们在做项目时,一个对象在很多地方都要频繁的使用,如果每用一次就new一个对象,这样做无疑会大大的浪费资源,降低程序的性能,这时,我们可以将这个创建对象的这个过程提取出来,做成一个单例模式。常见的单例模式有懒汉单例模式和饿汉单例模式,以下是一个简单的demo来解释一下:
//懒汉模式
public class SingletonL { //私有的静态对象 private static SingletonL singletonL; //构造方法进行私有化,防止在外部new对象 private SingletonL(){ System.out.println("我是懒汉"); } //得到唯一的对象,单例模式 public static synchronized SingletonL getSingletonL(){ if(singletonL==null){ singletonL=new SingletonL(); } return singletonL; } public void play(String name){ System.out.println("我是一个"+name); } }
//饿汉模式
public class SingletonE { //声明一个唯一的饿汉 private static final SingletonE singletonE=new SingletonE(); //私有化构造方法 private SingletonE(){ System.out.println("我是饿汉"); } //返回饿汉对象 public static SingletonE getSingletonE(){ return singletonE; } //懒汉和饿汉的模式不同点在于饿汉是直接用了一个final来修饰对象,而饿汉是在get方法中new对象的,还要判断对象是否为空。 }
以下是一个测试类:
public class Test { public static void main(String[] args){ SingletonL L=SingletonL.getSingletonL(); SingletonL L1=SingletonL.getSingletonL(); L.play("lanhan"); L1.play("lanhan1"); L.play("lan"); //SingletonE E=SingletonE.getSingletonE(); //SingletonE E1=SingletonE.getSingletonE(); } }