单例设计模式入门
Posted itwxj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例设计模式入门相关的知识,希望对你有一定的参考价值。
单例模式
单例模式, 在很多的框架底层都有使用spring底层使用居多,单例模式(在多线程环境下,对外存在一个对象)单例模式的实现有三种方式1:
1: 构造器私有化,避免外部new构造器
2: 提供私有的静态属性,存储对象的地址
3; 提供公共的静态方法 , 获取属性
单例模式 核心作用:
保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
单例模式的场景:(经常new对象,很耗资源)
1: 项目中 读取配置文件的类,一般也只有一个对象,没有必要每次使用配置文件数据,每次new一个对象去读取
2:网站的计数器,一般采用单例模式,否则难以同步
3数据库的连接池的设计一般使用单例模式,因为数据库连接是一种数据库资源。
4:操作系统的文件系统,是大的单例模式实现的例子,一个操作系统只能有一个文件系统。
5:pplication,也是单例的典型应用(Servlect 编程中会涉及到)
6:在Spring中,每个Bean默认就是单例的,这样做的优点是Spring容器可以管理
7:springMVC框架/strust1框架中,控制器对象也是单例
单例模式的优点:
- 由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要较多的资源的时候,
如读取配置,产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决
- 单例模式可以在系统设置全局的访问点,优化环境共享资源的访问,例如可以设计一个单例类,负责所有数据表的映射处理
常见的五种单例模式实现方式:
主要:
1; 饿汉式(线程安全,调用效率高,但是,不能延时加载。)
2:懒汉式(线程安全,调用效率不高,但是可以延时加载)
其他:
3:双重检测锁式(由于jvm地层偶尔会出现问题,不建议使用)
4:静态内部类式(线程安全,调用效率高,但是可以延时加载)
5:枚举单例(线程安全,调用效率高,不能延时加载 可以防止反射和反序列化破解单例模式,枚举是基于底层JVM实现的
如何选用常见五种单例模式?
单例对象 占用资源少,不需要延时加载
枚举式好于饿汉式
单例对象 占用资源大,需要延时加载:
静态内部类式 好于懒汉式
以上是关于单例设计模式入门的主要内容,如果未能解决你的问题,请参考以下文章