据我理解,单例设计模式是指系统中只有一个对象的实例。
我不确定这部分的定义,但我相信在操作系统只有一个运行内核在监督模式。
因此,说OS内核是一个单例是正确的吗?
发布于 2018-08-14 03:00:27
不是的。Singleton是面向对象编程的模式。大多数操作系统都不是这样设计的。事实上,很少有操作系统在内核中使用面向对象的编程。Linux以不自觉地使用C++ (面向对象)和坚持C(过程)而闻名。
即使您认为操作系统内核只是其中之一,而您只想要一个操作系统内核,那么虚拟化的整个概念就会让它发人深省。虚拟机在同一硬件中承载其他内核。然后,当您谈到容器化时,您的操作系统中包含了其他内核。
老实说,作为模式的单例应该是使用最少的模式之一--即使您只想在应用程序中使用其中之一。静态访问器可以使看似不相关的代码相互耦合,间接使用它们。
当您停下来考虑内核到底是什么时,您会发现Singleton模式离正确的理解更远。内核提供了许多功能,但它本身就是一个API。
内核:
许多内核为设备驱动程序定义了API (实际上设置寄存器和从设备中移动数据的代码),并为应用程序提供了一致的API以供使用。最终的结果是,您的应用程序不必仅仅因为您有了一个新的显卡就需要重写。
如果您要尝试将面向对象的概念引入内核的世界,更好的模式应该是接口、适配器和其他一些。但是没有一种模式可以说代表内核,因为内核要复杂得多。
发布于 2018-08-14 12:02:01
发布于 2018-08-14 05:06:34
对我来说,Singleton本身并不是一个类型本身的特性,而是它的使用方式。当您以IKernel::Instance()的形式访问内核时,它就是一个Singleton。当您从调用方获得它作为IKernel类型的参数时,那么它不是Singleton,即使实际上您的程序中从来没有几个内核对象。
正如其他答案所述,它更多地是关于面向对象的代码--这是获取对象的一种方法,它同时具有方法实现和方法应该使用的内部状态。但是,如果您有"OOP in C“(它使用函数指针的结构作为对象),那么您可以有一个"Singleton”get_kernel(),它返回这样的对象。
https://softwareengineering.stackexchange.com/questions/376813
复制相似问题