单例设计模式入门

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实现的

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

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

枚举式好于饿汉式

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

静态内部类式 好于懒汉式

 

以上是关于单例设计模式入门的主要内容,如果未能解决你的问题,请参考以下文章

入门设计模式之单例

单例设计模式入门

Python入门之Python的单例模式和元类

设计模式入门-单例模式

单例模式(从放弃到入门)

设计模式简单入门---单例模式