Design patterns 独生子女班

Design patterns 独生子女班,design-patterns,singleton,Design Patterns,Singleton,我们有一个应用程序,在那里访问配置文件,我们有一个单例类,它的对象被使用 我知道singleton类很好,只提供一个对象实例。 我的问题是为什么我们不能在需要时打开和关闭配置文件 当然,这种方法可能很昂贵,因为Windows需要分配一个句柄,并在不使用时将其丢弃 使用singleton类有什么具体的原因吗 谢谢,, 哈莎单身阶级可能是纯粹的邪恶。通常是这样。如果您决定对代码应用松耦合,您将看到它 我的建议是重新考虑你的设计。考虑在应用程序启动时读取配置文件,并在内存中持久化具有配置参数的对象。然

我们有一个应用程序,在那里访问配置文件,我们有一个单例类,它的对象被使用


我知道singleton类很好,只提供一个对象实例。 我的问题是为什么我们不能在需要时打开和关闭配置文件

当然,这种方法可能很昂贵,因为Windows需要分配一个句柄,并在不使用时将其丢弃

使用singleton类有什么具体的原因吗

谢谢,,
哈莎

单身阶级可能是纯粹的邪恶。通常是这样。如果您决定对代码应用松耦合,您将看到它

我的建议是重新考虑你的设计。考虑在应用程序启动时读取配置文件,并在内存中持久化具有配置参数的对象。然后可以将对象传递给需要配置参数的类/接口


您还可以重新设计应用程序,使其不需要多次写入配置文件,而无需使用单例(反)模式。

我将以某种方式反向回答您的问题:)
为什么要使用单例类。首先要注意的是,singleton类可能是软件开发中最误用的设计模式。但它有它的优点,在你的情况下,我认为它是可用的。如果您的应用程序广泛使用配置文件,通常最好将其设置为单例。到处传递配置文件对象会很痛苦。这也回答了任何与“松耦合”或TDD争论的人。因为如果您的应用程序在逻辑上与配置文件耦合,您只需使用它并使用配置文件对其进行测试。最重要的是,您的单例可以为测试返回不同的(模拟)实例,这为您提供了良好的封装

为什么我们不能在需要时打开和关闭配置文件。您可以使用singleton。单例模式对OO设计施加了限制(对象的1个实例)。这只是意味着程序员可以调用代码中的任何地方,比如:ConfigSingleton.Instance.GetDefaultFontColor();该对象的内部工作完全封装。如果愿意,可以在程序员每次调用GetDefaultFontColor时打开该文件。或者,您可以在某种事件(文件更改)上重新读取配置文件,并将其存储在内存中


重新表述最后一段:“使用singleton模式的事实并没有说明如何以及何时打开、读取、关闭、写入配置文件。

”我知道singleton类很好“你必须是互联网新手。尽管你的方法很流行,但它的缺点是需要将配置对象拖过许多类,其中一些类甚至可能根本不需要它,这样他们就可以将配置对象传递给实例化的对象。这污染了界面,也不优雅,IMHOI可以理解你的意思。即使您可以将类隐藏在许多接口(IConnectionConfigParameters、IOtherParameters)后面,并将每个“接口”传递给相应的类。我知道这个解决方案并不完美,尽管它比使用singleton要好得多(我经历过删除singleton类会有多痛苦)。但是,您可以直接使用配置文件,前提是每个程序集都读取自己的配置文件(app.config/web.config)。