假设我们有一个将在 (c#) 代码中广泛使用的类,例如 Log 类。假设日志将条目写入特定目录中的 XML 文件。现在,强制用户使用所需信息初始化类的一种尝试是将默认(无参数)构造函数设为私有(private),并提供一个采用logdirectory 参数的构造函数。这样做的缺点是,用户每次需要将某些内容写入日志并因此创建 Log 类的实例时,都需要提供参数。
还有哪些其他选项可用?预先感谢您的回复。
四个选项(大部分都涵盖了,但没有明确地放在一起):
只需将调用设为静态,并包括静态初始化。这对于(依赖于它的类的)测试来说很糟糕,但非常简单。
使用 singleton正如大多数其他答案所建议的那样。从测试的角度来看,这可能更好(您可以使用内部方法来替换单例,仅用于测试目的),并实现一个用于模拟目的的接口(interface)。
使用依赖注入(inject):让所有需要依赖的东西都在构造函数或其他任何东西中获取它,并让您的 DI 框架将所有东西连接起来。从测试的角度来看要好得多,但并不十分方便。
使用工厂 - 类似于单例,但将实现与构建分开。 (它可能有效地最终成为一个单例,但没有那么多的假设。)
我是一名优秀的程序员,十分优秀!