C/C++为啥日志模块要设计成单例模式的?有啥好处?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++为啥日志模块要设计成单例模式的?有啥好处?相关的知识,希望对你有一定的参考价值。

如题,有没有做过开发的?

    减少系统资源开销,由于单例只保留一个对象。

    提高创建速度,每次都获取已经存在的对象因此提高创建速度

    全局共享对象,由于单例在系统中只存在一个对象实例,因此任何地方使用此对象都是一个对象


    使用案例:

    缓存、打印机、显卡的驱动程序,等一些临界资源

    也可以是日志对象、线程池等,用于减少系统开销,和创建速度,当然我个人认为,池的技术可以优化单例模式。比如线程池,连接池。

参考技术A 这个世界没有必须要的,是习惯而已

解决一种问题的方法有很多种,单例模式一般是省了一个独立全局函数,这样一个日志类就解决了

为啥Spring把bean设计成单态的,这样的设计的好处是啥?

设计的时候没有考虑到并发访问,安全问题吗?

spring设计成单态,一方面是为了效率,还有一方面是节省内存开销.
事务,一般用spring都会为这些单态类的某些方法加上事务.声明式事务.
参考技术A 是单例模式吧?
Spring Bean作用域:scope属性
作用域 描述
singleton 默认值,在每个Spring IoC容器中一个bean定义对应一个对象实例。
prototype 一个bean定义对应多个对象实例。
request 在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring applicationContext情形下有效。
session 在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global session 在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。追问

我知道这些bean的作用域,为什么Spring设计的时候不直接把bean设计成多态的,这样就是线程安全的,每一次HTTP请求都生成新的bean,在修改,展现数据的时候也就不会出现乱套了,而Spring把bean设计成单态肯定有它的好处,要不然Spring就是挖个坑让自己跳,它的好处什么吗?设计成单态的原理是什么?

参考技术B 设计成什么态主要和你的需求有关系,各有优劣!

以上是关于C/C++为啥日志模块要设计成单例模式的?有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

设计模式单例模式

为啥Spring把bean设计成单态的,这样的设计的好处是啥?

单例设计模式

设计思想单例模式

设计模式之单例模式

java单例设计模式