单例模式:? 是一个比较简单的模式(类只有一个实例,而且自己实例化并向整个系统提供这个实例)
?
单利模式统一代码:(通过使用private构造函数确保在一个英语中只产生一个实例,并且是自己实例化的),代码如下:
public class Singleton{ private static final Singleton singleton=new Singleton(); //限制产生多个对象 private Singleton(){} //通过这个方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类里面的其他方法,尽量使static public static void doSomething(){ } }
?
单例模式的使用场景:
1》要求生成唯一的序列号的环境;
2》在整个项目里面需要一个共享访问点或共享数据;
3》创建一个对象需要消耗的资源过多,如果要访问IO和数据等资源;
4》需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单利模式(当然,也可以直接声明为static的方式);
?
?
单例模式的注意事项:
单例模式有很多种实现方法,开始给出的通用代码不会出现线程同步问题,但是下面的方法就需要考虑线程同步问题:
public class Singleton{ private static Singleton singleton=null; //限制生成多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ if(singleton==null){ singleton=new Singleton(); } return singleton; } }
?这个模式在低并发的情况下不会出现问题,但是并发量增多的时候边可能会在内存里面出现多个实例,破坏我们的预想,,,这个时候我们便需要在getSingleton()方法前面加synchronized关键字;
public class Singleton{ private static Singleton singleton=null; //限制生成多个对象 private Singleton(){ } //通过该方法获得实例对象 //利用synchronized 关键字来实现线程安全,也就是锁定这个方法,在这个方法在运行 //的时候,不允许被其他调用,直到当前对象调用完成,其他调用才会继续运行 public static Singleton synchronized getSingleton(){ if(singleton==null){ singleton=new Singleton(); } return singleton; } }
?
?
?
原文:http://qq-24665727.iteye.com/blog/2289771