В настоящее время у меня возникли проблемы с созданием AbstractFactory.
Есть несколько классов:Как выбрать экземпляр AbstractFactory?
abstract class ABase { }
class A1 : ABase { }
class A2 : ABase { }
abstract class BBase { }
class B1 : BBase
{
private readonly A1 _a;
public B1(A1 a)
{
_a = a;
}
}
class B2 : BBase
{
private readonly A2 _a;
public B2(A2 a)
{
_a = a;
}
}
abstract class FactoryBBase
{
abstract public BBase Create(ABase b);
}
class FactoryB1 : FactoryBBase
{
override public BBase Create(ABase b)
{
return new B1(b as A1);
}
}
class FactoryB2 : FactoryBBase
{
override public BBase Create(ABase b)
{
return new B2(b as A2);
}
}
class Runtime
{
public void ProcessA(ABase a)
{
//How should I choose a proper factory?
}
}
Вопрос в том, как создать экземпляр надлежащего абстрактную фабрику в ProcessA
метода в зависимости от типа a
? Дело в том, что я не хочу иметь большой блок if/else.
Другой вопрос: использовать шаблон AbstractFactory, поскольку он должен быть uesd?
Мое текущее решение - это что-то вроде этого. Я нахожу это в порядке, но я надеюсь, что есть более элегантное решение. – dmigo