十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
创新互联网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站建设、成都做网站易于使用并且具有良好的响应性。这篇文章给大家介绍深入浅析Java设计模式中的单例模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
单例模式是非常常见的设计模式,其含义也很简单,一个类给外部提供一个唯一的实例。下文所有的代码均在github
源码整个项目不仅仅有设计模式,还有其他JavaSE知识点,欢迎Star,Fork
单例模式的UML图
单例模式的关键点
通过上面的UML图,我们可以看出单例模式的特点如下:
1、构造器是私有的,不允许外部的类调用构造器
2、提供一个供外部访问的方法,该方法返回单例类的实例
如何实现单例模式
上面已经给出了单例模式的关键点,我们的实现只需要满足上面2点即可。但是正因为单例模式的实现方式比较宽松,所以不同的实现方式会有不同的问题。我们可以对单例模式的实现做一下分类,看一看有哪些不同的实现方式。
1根据单例对象的创建时机不同,可以分为饿汉模式和懒汉模式。饿汉是指在类加载的时候,就创建了对象。但是创建对象有时比较消耗资源,会造成类加载很慢,但是优点是获取对象的速度很快,因为早已经创建好了嘛。懒汉就是相对饿汉而言,在需要返回单例对象的时候,在创建对象,类加载的时候,并不初始化,好处与缺点也不言而喻
2.根据是否实现线程安全,可以分为普通的懒汉模式这种线程不安全的写法,和饿汉模式,双重检查锁的懒汉模式,以及通过静态内部类或者枚举类等实现的线程安全的写法。
一个线程不安全的单例模式
public class SimpleSingleton { private static SimpleSingleton simpleSingleton; private SimpleSingleton(){ } public static SimpleSingleton getInstance(){ if (simpleSingleton == null) { simpleSingleton = new SimpleSingleton(); } return simpleSingleton; } }