什么是单例模式?
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
单例设计模式有两种表现形式:
public class Single { private Single(){}//构造方法私有化 private static Single instance = new Single();//实例化对象 public static Single getInstance() { return instance;//暴露方法返回instance的对象 } }
饿汉式的特点:创建对象的同时就直接实例化对象。
那我们在看看“懒汉式”:
public class Single { private Single(){}//构造方法私有化 private static Single instance = null; public static Single getInstance() { if (instance==null)//这里判断看instance是否为空 { instance = new Single();//对象为空,实例化对象 } return instance;//返回对象 } }
懒汉式的特点:方法被加载时才进行初始化操作,“懒汉式”又被称为延迟加载设计模式。
仔细观察,懒汉式的代码是有弊端的,我们来看看。
class Single { private static Single s = null; private Single(){} public static Single getInstance() { // 锁是谁?字节码文件对象; if (s == null)//该处判断是减少判断,增加效率 { synchronized (Single.class)//保证线程安全 { if (s == null)//判断对象是否为空 s = new Single();//实例化对象 } } return s;//返回变量 } }
当多线程访问懒汉式时,因为懒汉式的方法内对共性数据进行多条语句的操作。所以容易出现线程安全问题。
上面加了几处判断,我们来分析下:
为了解决,加入同步机制,解决安全问题。但是却带来了效率降低。所以我们不建议使用“懒汉式”,饿汉式简单高效,安全。
单例模式的用在哪儿?
好了,到这里,我们的单例设计模式也基本接近尾声了,发现对于单例的解读也不是非常难,本身设计模式的目的就是为了方便编程才有了它的用武之地,所以设计模式掌握了其本质,也不会有那种“高大上”的阴影啦,好了,我们继续加油吧!
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/chenjinge7/article/details/47158627