单例模式
单例模式介绍:http://www.runoob.com/design-pattern/singleton-pattern.html
单例模式就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以定义全局变量访问同一个对象,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。
public class Singleton { private static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(instance==null){ instance = new Singleton(); } return instance; } }
测试代码。
public class Test { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); if(s1==s2){ System.out.println("两个对象是相同的实例!"); } } }
输出结果:两个对象是相同的实例!
单例模式因为Singleton类封装它的唯一实例,这样他可以严格地控制客户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。
单例类和java封装的工具类有什么区别?
相同点:java封装的工具类也会采用私有化的构造方法来避免其有实例。
不同点:
1、java封装的工具类不保存状态,仅提供一些静态方法或者静态属性供其他类调用。而单例类是有状态的。
2、java封装的工具类不能用于继承多态,而单例类虽然实例唯一,却可以有子类来继承。
3、java封装的工具类只不过是一些方法属性的集合,而单例类却有着唯一的对象实例。
多线程时的单例
多线程的程序中,同时访问Singleton类,调用GetSingleton()方法,可能创建多个实例。此时可以给线程加锁来处理。