Мне интересно, является ли это правильной практикой шаблонов проектирования. В настоящее время я разрабатываю код, в котором, по-видимому, есть строитель на заводе. В моем текущем дизайне я чувствую что-то плохое, но я не могу его точно определить. Код выглядит примерно так ...Шаблоны проектирования: строитель на заводе
class Program
{
static void Main()
{
string productName = "productA";
IProduct product1 = new Factory().GetNewProduct(productName);
}
}
class Factory
{
internal IProduct GetNewProduct(string name)
{
IProduct product = null;
switch (name)
{
case "productA":
product = new ProductA();
break;
case "productB":
product = new ProductB();
break;
case "productC":
product = new ProductC();
break;
default:
throw new Exception("Invalid product type!");
}
//builder (sort of)
product.addPart1();
product.addPart2();
...
return product;
}
}
+1 хорошо. это правда, что мои текущие продукты построены одинаково, и ваш подход сделает его более гибким. Я постараюсь реорганизовать мой код и будет отзывать результаты о том, как он выглядит. :) –
только что реализовал ваш подход к моему коду. выглядит отлично! Большое спасибо! Единственный вопрос, который у меня есть, - это если необходимо создать фабричный класс внутри строителя? Я только что включил метод GetNewProduct в класс builder вместо создания вложенной фабрики. –
Кроме того, предположим, что ProductA должен иметь Part1, поэтому разумно реализовать AddPart1() в классе ProductA ... но сказать, что ProductB имеет Part2, поскольку оба они совместно используют интерфейс продукта, им необходимо реализовать AddPart2(). Я был вынужден реализовать ProductA AddPart1() без каких-либо строк кода .. (т.е. только {}) –