Ich frage mich, ob dies eine gültige Praxis von Design-Mustern ist. Ich entwerfe gerade einen Code, wo es scheint, dass es einen Hersteller in der Fabrik gibt. Ich kann etwas Schlechtes in meinem aktuellen Design riechen, aber ich kann es nicht genau bestimmen. Der Code sieht so etwas wie diese ...Design Patterns: Builder in einer Fabrik
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 schön. Es ist wahr, dass meine aktuellen Produkte auf die gleiche Art und Weise gebaut werden und Ihr Ansatz würde es flexibler machen. Ich werde versuchen, meinen Code zu refaktorieren und werde die Ergebnisse darüber berichten, wie er aussieht. :) –
habe gerade deinen Ansatz für meinen Code implementiert. sieht großartig aus! Vielen Dank! die einzige Frage, die ich habe, ist, wenn es immer noch notwendig ist, die Fabrikklasse im Builder zu erstellen? Ich habe nur die GetNewProduct-Methode in die Builder-Klasse eingefügt, anstatt eine verschachtelte Factory zu erstellen. –
Nehmen wir an, ProductA muss nur Part1 haben, daher ist es sinnvoll, AddPart1() in der ProductA-Klasse zu implementieren ... aber ProductB hat ein Part2, da beide das Product Interface gemeinsam nutzen. Beide müssen AddPart2() implementieren. Ich war gezwungen, ProductA AddPart1() ohne irgendwelche Codezeilen zu implementieren .. (dh nur {}) –