/**设计模式: 什么是设计模式? 对问题行之有效的解决方式,其实,它是一种思想。 1,单例设计模式。 解决的问题:可以保证一个类在内存中的对象唯一性。 比如对于多个程序使用同一个配置信息对象是,就需要保证该对象的唯一性。 但是,如何保证对象的唯一性呢? 1,不允许其他程序使用new创建该类的对象。 2,在该类中创建一个本类实例。 3,对外提供一个方法,让其他的程序可以获取该对象。 步骤: 1,私有化该类的构造函数。 2,通过new在本类中创建一个本类对象。 3,定义一个公有的方法,将创建的对象返回。 代码如下:*/ class Single{ private Single(){}//私有化Single的构造函数。 static Single s=new Single();//在Single类中创建一个本类并且是静态的对象。 public static Single getInstance(){//创建一个公有的方法,返回s,这样可以控制 return s; } } //怎样在下面的类中调用Single 呢? class SingleDemo{ public static void main(String[] args){ Single single1=Single.getInstance();//直接调用方法,使用对象接受。 Single single2=Single.getInstance();// System.out.println(single1==single2); } } //打印的结果是:true;//所以,它们表示的是同一个引用,指向同一个地址。 //小试牛刀一下: class Test{ //单例模式 private Test(){};//1,私有化构造方法 static Test test=new Test();//在Test类中创建一个本类并且是静态的对象。 public static Test getInteface(){//对外提供公有的方法 return test; } private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } } //懒汉式 class Test2{ //单例模式 private Test2(){};//1,私有化构造方法 static Test2 test=null;//在Test类中创建一个本类并且是静态的对象。 public static Test2 getInteface(){//对外提供公有的方法 if(test==null) test=new Test2(); return test; } private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } } //在main方法中调用 //1,使用常规的方法调用,这样的方式,并没有使用单例设计模式,创建了两个对象,没有保证对象的唯一性。 class TestDemo1{ public static void main(String[] args){ Test test1=new Test(); Test test2=new Test(); test1.setNum(10); test2.setNum(20); System.out.println(test1.getNum()); System.out.println(test2.getNum()); //这个打印的结果是,10,20,因为创建了两个对象,两个对象的指向不同。 } } class TestDemo2{ public static void main(String[] args){ //如果我们要使用单例模式,必须要在调用的Test类中加入如上的代码。 Test test1=Test.getInteface(); Test test2=Test.getInteface(); test1.setNum(10); test2.setNum(20); System.out.println(test1.getNum()); System.out.println(test2.getNum()); //这个打印的结果是:20,20,因为它们使用的是同一个对象,指向的是同一个引用。 } }
2012年11月14日于合肥