2010-01-30 4 views
6

Как наследовать от одноэлементного класса в другие классы, которые нуждаются в одинаковой функциональности? Будет ли что-то вроде этого иметь какой-то смысл?Singleton Inheritance

ответ

0

Кто-то не стесняйтесь, поправьте меня, но, как я понимаю, и была ошибка с этим раз:

public class BaseClass 
{ 
    protected static List<string> ListOfSomething { get; set; } 
} 

public class ChildClass 
{ 
    protected static List<int> ListOfSomethingElse { get; set; } 
} 

public class AnotherChildClass 
{ 
    protected static List<int> ListOfSomethingElse { get; set; } 
} 

Оба дочерних классов разделит то жеListOfSomething, они не имеют их собственный экземпляр. Тот же статический один будет распространяться среди всех детей. Это линька поведения и наследования однопользовательского режима. Как сказал шелковистый ... вы просто не должны этого делать, вы, вероятно, столкнетесь с чем-то в этом направлении.

Если вы не говорите о чем-то подобном ... Я не уверен, о чем вы говорите, и пример очень поможет, так как у singleton есть много возможностей для ниши.

11

Jon Skeet wrote about this a назад. Можно достичь преимуществ наследования с помощью Singleton, хотя использование вложенных внутренних классов оставляет желать лучшего. Он не имеет бесконечной расширяемости, это всего лишь метод, когда Синглтон выбирает свою собственную реализацию во время выполнения.

Реалистично, наследование от Singleton не имеет особого смысла, поскольку часть шаблона Singleton является управлением экземплярами, и как только у вас уже есть физический экземпляр базового типа, слишком поздно переопределить любой из этих в производном типе. Даже если бы вы могли, я подозреваю, что это может привести к дизайну, который трудно понять и даже сложнее проверить/поддерживать.

3

Вы можете наследовать от singleton и для «повторного использования» или некоторой тонкой настройки с использованием шаблонов (C++) или generics (C# .NET).

Я писал в своем блоге (www.devartplus.com) в серии постов в этой теме:

1) Basic singleton inheritance в C# .NET

2) поточно-одноплодной наследование в C# .NET

3) Несколько одноэлементных реализаций в C++

Вы можете посетить эти ссылки и поделиться своим мнением. Удачи.