现在的位置: 首页 > 综合 > 正文

设计模式

2013年02月09日 ⁄ 综合 ⁄ 共 1746字 ⁄ 字号 评论关闭
/**设计模式:

	什么是设计模式?
	对问题行之有效的解决方式,其实,它是一种思想。

	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日于合肥

 

抱歉!评论已关闭.