Java单例设计模式详解
来源:互联网 发布:国税网络发票查询系统 编辑:程序博客网 时间:2024/05/17 01:35
java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
优点:
实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例
灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
案例:
private static Single mSinger = null; private Single(){}; /** 懒汉式单例(线程不安全) */ public static Single getInstances(){ if (mSinger == null){ mSinger = new Single(); } return mSinger; } /** 懒汉式单例(线程安全) */ public static synchronized Single getInstancesUp(){ if (mSinger == null){ mSinger = new Single(); } return mSinger; } /** 双重检查锁定 */ public static Single getInstancesUp1(){ if (mSinger == null){ synchronized(Single.class){ if(mSinger == null){//二次检查 mSinger = new Single(); } } } return mSinger; }
private static final Single single = new Single(); //静态内部类,解决反复判断问题,既实现了线程安全,又避免了同步带来的性能影响 private static class ClazzHolder{ private static final Single INSTANCE = new Single(); } public static Single getInstancesUp2() { return ClazzHolder.INSTANCE; } //饿汉式,解决反复判断问题 //类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生就是线程安全的 public static Single getInstancesUp3(){ return single; }
缺点:
开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题,上面的五种实现方式中已经说过了。
可能的开发混淆:使用 singleton 对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用 new 关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
对象的生存期:Singleton 不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于 .NET Framework 的语言),只有 Singleton 类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除
对象实例,但这样会导致 Singleton 类中出现悬浮引用
0 0
- 【Java设计模式单例模式详解】
- JAVA模式设计-单例模式 详解
- 详解Java设计模式:单例模式
- java设计模式详解----------单例模式
- java单例设计模式详解
- Java单例设计模式详解
- java中的单例设计模式详解
- Java 设计模式之单例模式详解
- java设计模式(一)之单例模式详解
- Java设计模式之五(单例模式详解)
- Java设计模式(一) 之 详解单例模式
- Java 设计模式之单例模式详解
- 【JAVA设计模式】之单例模式详解
- Java开发中的设计模式详解—单例模式
- Java设计模式(1)--单例模式详解
- Java 设计模式——单例模式详解
- Java设计模式详解之一单例模式
- Java设计模式详解之单例模式
- 【三】C++引用机制
- hiho一下 第五十八周
- gdb源代码文件目录修改
- R语言缺失值处理
- Hbase报错"org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation ca"
- Java单例设计模式详解
- 50-网站默哀样式(愿遇难者一路走好)
- 将Apache的访问日志实时写入mysql数据库
- Leetcode#33||Search in Rotated Sorted Array
- Java 程序优化:字符串操作、基本运算方法等优化策略
- MTK Android 5.0以上版本的变化
- dom4j中通过xpath处理带命名空间的XML文件
- YTU /蓝桥杯 2507: 李白打酒 水dfs
- php nusoap 创建和调用webservice