单例类:
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); } }
热心技术,并兼吃喝,偶谈风月,不言国事.