系列文章
【设计模式】七大设计原则
【设计模式】第一章:单例模式
【设计模式】第二章:工厂模式
【设计模式】第三章:建造者模式
【设计模式】第四章:原型模式
【设计模式】第五章:适配器模式
【设计模式】第六章:装饰器模式
【设计模式】第七章:代理模式
【设计模式】第八章:桥接模式
【设计模式】第九章:外观模式 / 门面模式
【设计模式】第十章:组合模式
【设计模式】第十一章:享元模式
【设计模式】第十二章:观察者模式
【设计模式】第十三章:模板方法模式
【设计模式】第十四章:策略模式
【设计模式】第十五章:责任链模式
【设计模式】第十六章:迭代器模式
【设计模式】第十七章:状态模式
【设计模式】第十八章:备忘录模式
【设计模式】第十九章:访问者模式
【设计模式】第二十章:解释器模式
【设计模式】第二十一章:命令模式
【设计模式】第二十二章:中介者模式
目录
一、定义及注意事项
摘自百度百科:单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)
也就是说,一个类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
在我们使用单例模式的时候需要注意的是:
- 单例类
有且只能有一个实例 - 单例类必须自己创建
自己的唯一实例。 - 单例类必须给
所有其他对象提供这一实例。
二、实现方式
在Java中,一般有两种实现方式:懒汉式和饿汉式,顾名思义:
- 懒汉式:比较懒,什么时候使用,什么时候才进行实例化
- 饿汉式:特别饥饿,因为饿怕了所以在创建对象的时候就进行实例化
1. 懒汉式(线程不安全)
public static class Lazy {
private static Lazy instance = null;
private Lazy() {
}
public static Lazy getInstance() {
if (null == instance) {
instance = new Lazy();
}
return instance;
}
}
这是懒汉式最基础的一种实现方式,方法在第一次访问的时候才进行实例化,从而达到懒加载的效果。但是这种写法会有线程安全的问题,假如在对象还未实例化的时候被两个线程同时访问,它就有可能出现被实例化多次的情况。那么有没有更好的解决方案呢,自然是有的,给上面的代码加锁就可以了,也就是线程安全的懒汉式。
2. 懒汉式(线程安全)
线程安全的懒汉式有两种写法:一种是把锁加在方法上,另一种是加在代码块中。
(1) 方法加锁
public static class Lazy {
private
单例模式详解

最低0.47元/天 解锁文章
2838

被折叠的 条评论
为什么被折叠?



