单例类:

1、什么是单例类:只允许创建一个对象实例的类,称为单例类

2、为什么要出现单例类:

  2.1、频繁的创建对象、回收对象造成系统的开销问题(比如:多次的创建数据库连接对象:conn 用来打开关闭数据库,造成服务器开销大,可以改成创建一个数据库连接对象conn,直到不再需要操作数据库再把这个对象conn回收)

  2.1、多次的创建对象对业务逻辑没有什么意义

3、把一个类定义为单例类注意原则:

  3.1、把该类的构造器用private修饰符定义,把构造器隐藏起来,不让直接通过new该类的构造器来创建该类对象实例

  3.1、根据良好封装的原则,一旦把该类的构造器封装起来,就需要创建一个public方法作为访问该类的入口,且该方法必须用static修饰符,因为该类构造器隐藏,调用该方法的时候不存在类的实例对象,只能用类来访问

  3.3、该类必须能缓存已创建的对象,否则该类无法知道是否曾经创建过对象,也就无法保证只创建一个对象

  3.4、因此需要创建一个成员变量来保存曾经创建的类对象,而且该成员变量还必须能被上面的静态方法访问,因此必须用static修饰符修饰

鉴于上面条件,创建一个单例类示例:

class Singleton{
	
	//-使用一个类变量缓存曾经创建的类实例对象
	private static Singleton instance;

	//-对构造器用private修饰,隐藏起来,禁止直接new该类的构造器
	private Singleton(){
		
	}
	
	//-提供一个public修饰的静态方法,作为该类的入口
	//-作用是保证只产生一个类对象实例,并返回
	public static Singleton getInstance(){
		if(instance==null){
			instance=new Singleton();
		}
		return instance;
	}
}

public class SingletonTest{
	public static void main(String[] args){
		//-直接通过类访问其静态方法,获取其类的实例
		Singleton s1=Singleton.getInstance();
		
		//-再次通过类访问其静态方法,但获取的仍然是上次创建的类对象实例
		Singleton s2=Singleton.getInstance();

		//-因为获取到的是同一个类实例对象,所以 == 判断是相等的,返回true
		System.out.println(s1==s2);
	}
}

 

posted on 2017-12-19 18:17  不丶懂  阅读(1446)  评论(0编辑  收藏  举报

导航