码迷,mamicode.com
首页 > 其他好文 > 详细

单例设计模式入门

时间:2019-10-09 23:55:03      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:存储   私有化   连接池   线程   连接   没有   管理   内存   常见   

                                    单例模式

 

单例模式, 在很多的框架底层都有使用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实现的

如何选用常见五种单例模式?

单例对象 占用资源少,不需要延时加载

枚举式好于饿汉式

单例对象 占用资源大,需要延时加载:

静态内部类式 好于懒汉式

 

单例设计模式入门

标签:存储   私有化   连接池   线程   连接   没有   管理   内存   常见   

原文地址:https://www.cnblogs.com/itwxj/p/11644965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!