http://www.iteye.com/topic/575052
单例模式
保证一个类仅有一个实例,并提供一个访问他的全局访问点
单例模式最要关心的则是对象创建的次数以及何时被创建。
单例模式的实现
一个类的对象产生是由类构造函数来完成的,如果想限制对象的产生,一个办法就是将构造函数私有化(or受保护的),外面的类不能通过引用来产生对象,同时,为了保证类的可用性,必须提供一个自己的对象以及访问这个对象的静态方法。
单例模式可分为有状态的和无状态的。
有状态的单例对象一般也是可变的单例对象,多个单态对象在一起就可以作为一个状态仓库一样向外提供服务。
没有状态的单例对象也就是不变单例对象,仅用做提供工具函数。
特点
1,该类只有一个实例
2,该类自行创建该实例(在该类内部创建自身的实例对象)
3,向整个系统公开这个实例接口
实现
- //饿汉式
- public class Singleton {
- //在自己内部定义自己一个实例
- //注意这是private只供内部调用
- private static Singleton instance = new Singleton();
- //如上面所述,将构造函数设置为私有
- private Singleton(){}
- //静态工厂方法,提供了一个供外部访问得到对象的静态方法
- public static Singleton getInstance() {
- return instance;
- }
- }
使用时
- //懒汉式
- public class Singleton {
- //和上面有什么不同?
- private static Singleton instance = null;
- //设置为私有的构造函数
- private Singleton(){
- }
- //静态工厂方法
- public static synchronized Singleton getInstance() {
- //这个方法比上面有所改进
- if (instance==null)
- instance=new Singleton();
- return instance;
- }
- }