Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于解析消息的单例工厂_C#_Design Patterns - Fatal编程技术网

C# 用于解析消息的单例工厂

C# 用于解析消息的单例工厂,c#,design-patterns,C#,Design Patterns,我们正在开发一个应用程序来处理各种XML消息并将它们加载到数据存储中。我正在与之合作的开发人员之一创建了一个单例工厂,利用反射来创建相应消息子类的实例。我的问题是在工厂中使用单例…(使用相同的方法构建SqlCommand对象需要传递给DB)。工厂在这里绝对是有意义的,我不清楚的是在工厂中使用Singleton 我已经阅读了很多帖子、stackoverlow回复等,但我仍然不清楚为什么在这种情况下我们会使用这种模式(Singletonwith factory…,我假设只使用factory模式?)

我们正在开发一个应用程序来处理各种XML消息并将它们加载到数据存储中。我正在与之合作的开发人员之一创建了一个单例工厂,利用反射来创建相应消息子类的实例。我的问题是在工厂中使用单例…(使用相同的方法构建
SqlCommand
对象需要传递给DB)。工厂在这里绝对是有意义的,我不清楚的是在工厂中使用Singleton

我已经阅读了很多帖子、stackoverlow回复等,但我仍然不清楚为什么在这种情况下我们会使用这种模式(
Singleton
with factory…,我假设只使用factory模式?)


为了更好地理解我收集的信息,当您想要确保一个且只有一个接口时,您可能希望使用
Singleton

Singleton不能确保一个接口;它们确保其他对象可以全局访问对象的单个实例。例如,当您需要一个可以从应用程序中的任何位置访问的计数器时,您可能希望使用单例。换句话说,单个对象的状态将在应用程序的整个生命周期中保持

另一方面,工厂用于创建对象,您不一定知道返回的类的确切类型。例如,您可能有一个返回汽车对象的工厂,但返回的确切类可能是大众汽车或法拉利

工厂被大量用于依赖注入(DI)。因此,在您给出的示例中,您可以使用工厂返回与DB接口的对象,但是实际的类可能使用SQL语句与DB接口,或者可能是另一个使用对象关系映射(ORM)框架的类。这将实际的数据库接口/实现与应用程序的其余部分分离,并允许对数据库访问进行更灵活的更改。工厂甚至可以返回一个DB访问模型,用于单元测试。DI可用于更改在运行时使用的方法。出于这些原因,我坚决建议使用工厂


工厂也可以退回单身人士。因此,在确定是否需要单例时要问的问题是,我是否需要在整个应用程序中维护所有将访问此单例的对象的状态。想要维护状态的一个例子是,您希望在应用程序的生命周期内,为访问此DB对象的任何对象保持与数据库的连接打开。不建议您这样做,但这只是一个示例,说明了为什么您可能希望在应用程序的生命周期内维护该对象的状态信息。

现在停止,阅读相关内容。学习理论和实践。了解生命周期管理和构造函数注入。这些将消除单例,允许您编写松散耦合和可测试的代码,并可能消除对工厂的需要