У меня концептуальная проблема. Я хотел бы использовать фабрику шаблонов проектирования, используя перечисление, чтобы узнать, какой тип объекта создать. Но когда дело доходит до наследования в другой сборке, я придерживаюсь своего перечисления...
Поясню случай:
Я создаю Framework для нескольких проектов, которые управляют фруктами.
Я создаю интерфейс IFruit
, реализованный абстрактным классом Fruit
, от которого будут наследоваться Strawberry
, Apple
и Pear
.
Я создаю перечисление FruitTypes
, которое содержит Strawberry
, Apple
и Pear
.
Я создаю FruitFactory
с помощью виртуального метода: GiveMeANewFruit(FruitTypes newFruit)
, который возвращает IFruit
.
Все хорошо.
Я отправляю свой Framework по всему миру, и кому-то на нашем испанском заводе нужно также управлять бананами.
Он создаст класс Banana
, который наследует Fruit
.
Он создаст SpanishFruitFactory
, который будет наследоваться от FruitFactory
, и переопределит виртуальный метод GiveMeANewFruit
, вот код, который может быть в этом методе:
Public Override IFruit GiveMeANewFruit(FruitTypes newFruit)
{
if (newFruit == FruitTypes.Banana)
return new Banana();
else
return base.GiveMeANewFruit(newFruit);
}
Но эй, вот проблема. Я знаю, что такие языки, как C#, не позволяют наследовать перечисления. Итак, мой парень не может добавить значение Banana
к перечислению FruitTypes
.
Итак, каким шаблоном лучше всего заменить перечисление, чтобы я мог дать внешнему миру возможность добавлять новые типы объектов в мою концепцию?
Зная, что я НЕ хочу иметь что-либо вне исходного кода (ни XML-файл, ни базу данных, ни что-либо еще, предоставляющее список типов).
Есть ли у вас какие-либо рекомендации ?