单例模式
2016-03-06 19:46
323 查看
单例模式是一种很常用的模式,也是很多人都知道的一种模式,单例模式的定义是:保证一个类只有一个实例,并提供一个访问它的全局的访问点。这里的全局访问点就是我们所说的公开的静态获得实例的方法。
案例:我们创建两个类,一个类是Singleton,一个类是Consumer,并且都是单例,只允许创建一个实例。Singleton类使用单例模式中的饿汉式实现,Consumer类使用懒汉世来实现。
Singleton类如下:
案例:我们创建两个类,一个类是Singleton,一个类是Consumer,并且都是单例,只允许创建一个实例。Singleton类使用单例模式中的饿汉式实现,Consumer类使用懒汉世来实现。
Singleton类如下:
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }Consumer类如下:
public class Consumer { private static Consumer instance; private Consumer() {} /** * 注意多线程的情况 * synchronized同步,但是影响性能 */ public static synchronized Consumer getInstance(){ if (instance == null) { instance = new Consumer(); } return instance; } }接下来测试一下:
public class Test { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); if (s1 == s2) { System.out.println(true); } Consumer c1 = Consumer.getInstance(); Consumer c2 = Consumer.getInstance(); if (c1 == c2) { System.out.println(true); } } }总结:我们的测试结果是输出两个true,但是测试不算很严格,只是单纯的测试,没有使用多线程来测试。我们来分析一下两个不同的方式实现单例的优点和缺点。饿汉式是直接创建实例,缺点是在我们还没有使用该类之前就已经有实例了,并没有在我们需要的时候创建,优点是安全,无论是多线程还是单线程,都只会创建一个实例。懒汉式的话,优点是在需要使用的时候再创建,缺点是不安全,存在安全隐患。即使使用了同步机制synchronized,在类加载的时候加锁,但是如果是跨JVM的话,就有可能出现多实例的情况。
相关文章推荐
- 多维数组元素的下标引用于指针访问
- 【郑轻-oj】-1048: 阶乘表(数据太大用double)
- php checkbox复选框值的获取与checkbox默认值输出方法
- 调用dll相关
- 当前主流的导航控制器手势滑动效果
- mysql阅读笔记八
- 阿里巴巴2016校招笔试题(含答案、解析)
- Struts2框架具体解释
- 实现一个反向传播人工神经网络
- 20145203盖泽双问卷调查
- Python-Day01-task
- ListView嵌套GridView使用详解及注意事项
- listView里面添加gridview
- eclipse快捷键
- 学习莫队算法、、、
- hello node world
- 达达日志系统(一)收集
- 如何搭建java开发环境
- 【一周读书】哲学家,你们都干了些什么?
- 动态加载图片的Adapter