应用最广的模式-单例模式
来源:互联网 发布:离婚证制作软件 编辑:程序博客网 时间:2024/05/17 03:17
应用最广的模式—–单例模式
- 单例模式的介绍
单例模式是应用最广的模式之一,在应用这个模式的时候,单例对象的类必须保证只有一个实例存在,许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统的整体行为。 单例模式的定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
好了。说了这么多似懂非懂,贫道也腻歪,下面我们来说点实际的吧,单例模式一般会有哪些关键点呢?容贫道一一道来
1、构造函数不对外开放,一般为Private
2、通过一个静态方法或者枚举返回单例类对象
3、确保单例类的对象有且只有一个,尤其是多线程的环境下
4、确保单例对象在反序列化时不会重新构建对象单例模式的实践
3.1.说了这么多有的没的,下面就来撸一把。分别介绍有几种实现单例模式的方法。
3.11.懒汉模式
public class Singleton { /*懒汉模式*/ private static Singleton instance; private Singleton(){} private static synchronized Singleton getInstance(){ if (instance == null ){ instance = new Singleton(); } return instance; }好了,我们现在实现了最简单的单例。我们在getInstance()方法中添加了synchronized关键字,也就是说这个方法是个同步方法,所以这就上面所说的特点满足确保单例类的对象有且只有一个,尤其是多线程的环境下,但是我们细细的来一下啊,我们会发现一个问题,即使instance已经被初始化(第一次调用会进行初始化instance)每次调用getInstance都会进行同步,这样就会消耗不必要的资源,这也是这种模式存在的最大问题。所以呀一般也不建议使用。 3.1.2. Double cHECK lOCK(DCL)模式public class Singleton { /*DCL模式*/ private volatile static Singleton instance = null; private Singleton() { } private static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; }}DCL的优点:资源利用率高,第一次执行getInstance时单例对象才会被实例化,效率高,缺点为第一次加载时反应稍微慢点,DCL时是使用最多的单例模式实现,他可以在需要的时候才实例化。并且大多数的情况下能保证单例对象的唯一性。 3.1.3 静态内部类单例模式
- Created by liwenjie on 2017/5/5.
*/
public class Singleton {
/静态内部类模式/
private Singleton() {
}
public static Singleton getInstance(){
return SingletonHolder.mSingleton;
}
/*静态内部类*/private static class SingletonHolder{ private static final Singleton mSingleton =new Singleton();}
}
“`
这种方式当第一次加载的时候并不会初始化mSingleton ,只有在第一次调用getInstance时候才会导致mSingleton 初始化,这种方式不仅能保证线程安全,也能保证单例对象的唯一性。同时也延迟了单例的实例化,这我比较推荐这种方式。
好了~~单例就介绍到这吧。。贫道老老实实的去搬砖了。
南无阿弥陀佛。善哉善哉~
0 0
- Android应用最广的模式-单例模式
- 应用最广的模式--单例模式
- 应用最广的模式-单例模式
- Android 设计模式の单例模式——应用最广的模式
- 单例模式——应用最广的模式(二)
- 应用最广的模式-单列模式(结合Android源码)
- Android中使用很广的模式-单例模式
- 设计模式之单例模式——应用最广泛的设计模式
- 单例模式的应用
- 单例模式的应用
- 单例模式的应用
- 单例模式的应用
- 单例模式的应用
- 最实用的单例模式
- 最简单的单例模式
- IOS 最简单的单例模式
- 单例模式最完整的讲解
- 【Unity】最普通的单例模式
- tornado模板参数传递
- java san jiaoxing
- 生产管理系统产品管理的添加方法
- U3D-- U3d Shader的一些知识
- DialogActivity
- 应用最广的模式-单例模式
- SVD与SVD++
- 【深入浅出事务】(1):事务的本质
- git错误解决---If no other git process is currently running...
- Spring Boot中使用Spring-data-jpa
- 移动端常用框架
- ijkplayer 解决rtmp 延迟长的问题,达到秒开的结果
- 谈谈Spring中的IOC、DI和AOP概念
- Python正则表达式指南