【问题标题】:Parameterized singleton patterns参数化单例模式
【发布时间】:2008-09-30 04:18:23
【问题描述】:

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

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

【问题讨论】:

    标签: c# design-patterns


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      如果你需要向单例构造函数提供额外的信息,你可以创建一个对象池。

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        相关资源
        最近更新 更多