博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 单利模式
阅读量:5337 次
发布时间:2019-06-15

本文共 2171 字,大约阅读时间需要 7 分钟。

1.核心作用

单例模式(Singleton Pattern)是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

2.应用场景

  •    项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,每次new一个对象去读取。
  •    数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
  •    在Spring中,每个Bean默认就是单例的,这样做的优点是Spring容器可以管理

3.单利模式的优点

 

 由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对  象,然后永久驻留内存的方式来解决。

 单例模式可以在系统设置全局的访问点,优化环共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理

4.常见的四种单例模式

   • 饿汉式(线程安全,调用效率高。 但是,不能延时加载。)

   • 懒汉式(线程安全,调用效率不高。 但是,可以延时加载。)
   • 静态内部类式(线程安全,调用效率高。 但是,可以延时加载)
   • 枚举单例(线程安全,调用效率高,不能延时加载)

5.代码实例

第一种:懒汉式

   

/** * @ClassName :   SingletonL * @Description: 懒汉式单利模式(线程安全,调用效率不高,但是,可以实现延时加载) * @Author: 13394 * @CreateDate: 2018/11/14 15:23 * @Version: 1.0 */public class SingletonL {     private static SingletonL instance=null;     private SingletonL(){     }     public static SingletonL getInstance(){         if (null==instance){             instance=new SingletonL();         }         return instance;     }          }

 第二种:饿汉式

 

/** * @ClassName :   SingletonE * @Description: 饿汉式单利模式(线程安全,调用效率高,但是,不可以延时加载) * @Author: 13394 * @CreateDate: 2018/11/14 14:29 * @Version: 1.0 */public class SingletonE implements Serializable{    //防止被引用    private static SingletonE instance=new SingletonE();    //防止被实例化    private SingletonE(){            //防止反射调用私有的构造方法           if (null!=instance){               throw new RuntimeException();           }    }    public static SingletonE getInstance(){        return instance;    }    //反序列化时,如果定义了readResolve()则直接返回此方法指定的对象。而不需要单独再创建新对象!    private Object readResolve() throws ObjectStreamException {        return instance;    }}

 第三种:静态内部类 

  

public class SingletonJt {    private static class staticFactory {        private static SingletonJt instance = new SingletonJt();    }    private SingletonJt() {    }    public static SingletonJt getInstance() {        return staticFactory.instance;    }}

第四种:枚举

/*** @ClassName : Singletonenum* @Description: 枚举单利模式(线程安全,调用效率高,不能延时加载)* @Author: 13394* @CreateDate: 2018/11/14 15:31* @Version: 1.0*/public enum Singletonenum {INSTANCE;}

  

如何选用?

– 单例对象 占用 资源 少,不需要 延时加载:
• 枚举式 好于 饿汉式
– 单例对象 占用 资源 大,需要 延时加载:
• 静态内部类式 好于 懒汉式

 

 

转载于:https://www.cnblogs.com/xiaofuzi123456/p/11319384.html

你可能感兴趣的文章
函数名可以作为函数的返回值
查看>>
C代码中如何调用C++ C++中如何调用C
查看>>
webx学习
查看>>
eclipse导出可供项目引用的jar
查看>>
(16)JavaScript的流程控制(js的循环)
查看>>
java之equals()和hashCode()方法
查看>>
十进制转换为二进制(一直不会算的)
查看>>
Linux源码编译安装php7.3
查看>>
CF997B Roman Digits
查看>>
CF786B Legacy
查看>>
PHP7.1安装xdebug
查看>>
HighCharts的.Net本地导出环境配置
查看>>
[bbk5398] 第96集 -第12章 -数据移植 02
查看>>
Swift 2.0 单例的用法
查看>>
C++知识点综述
查看>>
模板方法模式
查看>>
获取url参数
查看>>
python3-开发面试题(python)6.23基础篇(2)
查看>>
二叉树算法小结
查看>>
ORACLE 异常错误处理
查看>>