移动架构08_单例模式
来源:互联网 发布:2015十大网络神曲视频 编辑:程序博客网 时间:2024/05/22 05:22
Demo:http://download.csdn.net/download/baopengjian/10005006
一、饿汉模式:
第一步加载class文件就已经实例化了
缺点:没有做到想用时才实例化
public class SingleEasy {
private static SingleEasy singleEasy = new SingleEasy();
public static SingleEasy getInstance(){
return singleEasy;
}
}
二、懒汉模式:
每次调用getInstance时 都需要进行同步开销
public class SingleNotEmptyEasy {
private static SingleNotEmptyEasy iEasy;
public static synchronized SingleNotEmptyEasy getInstance(){
if(iEasy == null){
iEasy = new SingleNotEmptyEasy();
}
return iEasy;
}
}
三、DCL单例模式:
缺点:高并发时,也会产生创建不止一个对象。
原因:class文件中方法的字节码流就是由JVM的指令序列构成的
Jdk5 以后支持处理器乱序执行 汇编指令
导致 指向地址和实例化堆区 顺序不同
public class DCLSingle {
private static DCLSingle single;
public DCLSingle getInstance(){
if(single == null){
synchronized (DCLSingle.class) {
if(single == null){
single = new DCLSingle();
}
}
}
return single;
}
四、枚举:
public enum EnumManger {
SDCardManager(10)
{
@Override
public EnumManger getSingle() {
return SDCardManager;
}
}
,
HttpManager(1) {
@Override
public EnumManger getSingle() {
return HttpManager;
}
};
private int type;
public abstract EnumManger getSingle();
private EnumManger(int type)
{
this.type = type;
}
}
注意:
1 枚举中的属性必须放在最前面
2. 枚举中可以和java类一样定义方法
3. 枚举中的构造方法必须是私有的
五、登记式/静态内部类
是否多线程安全:是
描述:这种方式能达到双检锁方式一样的功效,但实现更简单。对静态域使用延迟初始化,应使用这种方式而不是双检锁方式。这种方式只适用于静态域的情况,双检锁方式可在实例域需要延迟初始化时使用。
代码实例:
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
阅读全文
0 0
- 移动架构08_单例模式
- 移动架构07_原型模式
- 移动架构11_建造者模式
- 移动架构12_责任链模式
- 移动架构14_命令模式
- 移动架构15_解释器模式
- 移动架构16_模板模式
- 移动架构17_观察者模式
- 移动架构19_状态模式
- 移动架构20_策略模式
- 移动架构22_迭代器模式
- 移动架构04_设计模式一:工厂模式
- 移动架构06_设计模式二:抽象工厂模式
- 设计模式_单例
- 04_单例模式
- 队列_单例模式
- 单例模式_装饰模式_模板模式
- 设计模式_单例模式
- SVM进阶问题
- LeetCode #114
- Python爬虫之urllib简单使用
- 实现10进制转换为2进制
- 再谈java乱码:GBK和UTF-8互转尾部乱码问题分析
- 移动架构08_单例模式
- LeetCode题解 第四周
- mysql优化-索引类型
- 2017/10/1 学习日记
- ffmpeg 实现对图片逐帧的处理
- selector
- 数字全排列返回list的list:java实现
- 一个BS框架工程搭建笔记
- strcpy时如何有效的在堆区申请内存