参数化单例模式

时间:2008-09-30 04:18:23

标签: c# design-patterns

此处的链接列出了([http://www.yoda.arachsys.com/csharp/singleton.html] [1])C#中的一些单例模式。该文章还明确地描述了单例并不意味着接受参数“否则对实例的第二次请求但具有不同的参数可能会有问题”。这意味着您需要使用该类所需的任何参数作为属性。

我很想知道是否有任何参数化的单例设计模式。接受值作为属性不会对消费者强制执行任何操作。

2 个答案:

答案 0 :(得分:3)

根据您的问题,您可能正在查看抽象工厂模式(创建几个类系列的实例),该模式保留已经实例化的类的内部列表/字典,从而模仿单例模式功能

然后,您将使用此工厂类根据您传入的参数请求对象,如果它存在于其内部列表中则返回,如果不存在,则创建新实例,然后添加到列表中并返回。

答案 1 :(得分:1)

  

他的意思是你需要的任何参数   让班级工作应该是   诱导为财产。

理想情况下,单例类不应该依赖于外部代码。

如果您需要向singleton构造函数提供其他信息,您可以创建一个对象池。

它可以是简单列表或任何其他合适的数据结构。您将需要使其成为线程安全的(如果重要)并保证不会有多个对象使用相同的参数进行实例化。

基本上你会有一个班级工厂。它将为相同的参数返回相同的对象。

在这种情况下,您将拥有N个单例对象 - 即具有不同状态的对象将被视为完全不同的实例。

您可以在Inversion of Controls容器中找到此类单例的示例。

例如,您可以拥有一些依赖于其他服务的服务。当你调用container.Get(服务类型)时。 DI容器将使用所需参数自动初始化服务实例并将其返回给调用者。但是这个服务实例变成了单例 - 你将无法使用相同的参数创建另一个服务。