Мне нужно создать одно из нескольких объектов на основе некоторого значения, и мне было рекомендовано изучить шаблоны Factory
. Я не хочу, чтобы мой клиент, имеющий решить, какой объект создавать или требовать жестко закодированные имена классов, поэтому после того, как делают некоторые чтения я придумал следующее (упрощенный), например:Реализация фабричного шаблона
public class ObjectA : IObject
{
}
public class ObjectA : IObject
{
}
public interface IObjectFactory
{
IObject CreateObject(ObjectCreationParameters p);
}
public abstract ObjectFactory : IObjectFactory
{
abstract IObject CreateObject(ObjectCreationParameters p);
}
public ConcreteObjectFactory : ObjectFactory
{
public IObject CreateObject(ObjectCreationParameters p)
{
IObject obj;
switch (p.Value)
{
case A:
obj = new ObjectA();
break;
case A:
obj = new ObjectB()
break;
}
return obj;
}
}
Вышеприведенные работает, но я я немного смущен относительно того, правильна ли моя реализация или нет.
Я предпочел бы не иметь ObjectAFactory
и ObjectBFactory
как в Factory Method
шаблоне, если этого можно избежать, однако, моя иерархия объектов, кажется, не следовать той же иерархии объектов, как в примере Abstract Factory
рисунка. У меня нет ObjectA2
или ObjectB2
, которые можно было бы создать через ConcreteObject2Factory
.
Является ли моя реализация правильной или я делаю что-то неправильно, и если да, то что?
Цель фабрики - не допустить, чтобы вызывающий код беспокоился о том, как создать объект. Вызывающему не нужно указывать, какой класс он хочет создать. – usr
вам нужно проверить разницу между заводским шаблоном метода и абстрактным заводским шаблоном. эта ссылка имеет хорошее объяснение http://stackoverflow.com/questions/4209791/design-patterns-abstract-factory-vs-factory-method –