本文共 1087 字,大约阅读时间需要 3 分钟。
单例模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
意图:单例类必须自己创建自己的唯一实例,并必须提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
何时使用:当您想控制实例数目,节省系统资源的时候。
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
关键代码:构造函数是私有的!!!
1、经典的手撕单例——懒汉式(调用时初始化对象)
public class Singleton {
private static Singleton instance=null;//所以该类无法被实例化,也就是new出来
private Singleton() { }//既然无法在外部被实例化,那么我们就必须在内部实例化,然后提供一个公有的方法将该实例返回
public static Singleton getInstance(){ if(instance==null){ instance=new Singleton(); } return instance; } }
2、饿汉式 (类加载时就初始化对象)
private static Singleton instance=new Sington();
3、线程安全的懒汉式(在getInstance方法上加同步锁)
public static synchronized Singleton getInstance(){.....}
4、线程安全的双重校验锁(在getInstance方法内嵌套判断是否实例化)
双重校验锁先判断 Instance 是否已经被实例化,如果没有被实例化,那么才对实例化语句进行加锁。
public static synchronized Singleton getInstance(){
if (uniqueInstance == null) { synchronized (Singleton.class) { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } return uniqueInstance;}
转载地址:http://srzsi.baihongyu.com/