Я думаю, что вы смешиваете две разные вещи здесь.Шаблон singleton требует одного экземпляра, который используется всеми вызывающими.Наследование просто означает, что я могу разделить общую логику между иерархиями классов.Это, я чувствую, реализация шаблона синглтона: (игнорируйте отсутствие блокировки / безопасности потока, ради примера)
public class Singleton
{
private static Singleton _instance;
public static Singleton Instance
{
get
{
if (_instance == null)
{
// This is the original code.
//_instance = new Singleton();
// This is newer code, after I extended Singleton with
// a better implementation.
_instance = new BetterSingleton();
}
return _instance;
}
}
public virtual void ActualMethod() { // whatever }
}
public class BetterSingleton : Singleton
{
public override void ActualMethod() { // newer implementation }
}
У нас все еще есть синглтон, доступ к которому осуществляется через статический экземпляр класса Singletonчлен.Но точная идентичность этого экземпляра может быть расширена с помощью подклассов.