c# - Singleton 应该是可继承的还是不可继承的?

标签 c# design-patterns inheritance singleton


单例应该是可继承的还是不应该继承的?

根据 Gof 的说法,“当唯一的实例应该可以通过子类化进行扩展时,并且客户端 应该能够使用扩展实例而不修改其代码。”

但是为什么我会在 MSDN 上看到密封和私有(private)构造函数示例

最佳答案

在我的项目中,我使用 Mark Seemann 的《.NET 中的依赖注入(inject)》一书中的环境上下文实现。使用该模式的要点是,当您请求 Current 实例时,必须有一些东西,并且 Context 可以通过其他实现进行切换。 F.E.

public class TimeContext
{
    private static TimeContext _instance;

    public static TimeContext Current
    {
        get
        {
            if (_instance == null)
            {
                _instance = new DefaultContext();
            }
            return _instance;
        }
        set
        {
            if (value != null)
            {
                _instance = value;
            }
        }
    }
    public abstract DateTime GetDateTime();
}

上下文的具体实现应该是这样的:

public class DefaultContext : TimeContext
{
    public DateTime GetDateTime()
    {
        return DateTime.Now();
    }

}

关于c# - Singleton 应该是可继承的还是不可继承的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9100523/

相关文章:

c# - 有什么方法可以将 Sql 和 Mongo 更新包装到单个事务中

c# - 计算用于 DateTime 格式化的字符串格式

scala - 您如何使用 Scala 将功能混合到迭代过程的每个步骤中?

Java——将数据输入与数据输出关联起来?

android - 使用 linkify 创建链接

python - Python 中的函数“子类化”?

c# - 在 C# 中的数据表中的特定位置填充数据

c++ - 为什么在虚拟继承中调用默认构造函数?

c++ - 从 C++ 中的虚拟模板类继承

c# - visual studio 2010 express 和 2012 express 打开c#项目的区别