Muster-Fabrik (Factory)
von Jose Jorge Marquez Gomez auf ago.27, 2010, unter DoNet
Ein Factory-Pattern dient dazu, alle Kreationen von Objekten in einem einzigen Punkt zu lenken. Dies ist nützlich für robustes Design unseres Systems und auf Veränderungen reagieren.
Das Factory-Pattern können mit dem Singleton-Muster kombiniert werden, da es mehr komfortabel zu bedienen und nützliche Form zu bedienen ist. In diesem Beispiel werden wir eine Fabrik ohne Singleton setzen.
Um das Factory-Pattern sagen, ist der Erzeugungsmuster, diese Art von Muster, das den Weg für konkrete Objekte zu erstellen abstrahiert und damit Möglichkeiten zur Unterstützung von Objekten in der Zusammenfassung zu erstellen.
Um eine Fabrik-Muster zu beginnen ist, durchzuführen:
- Eine Funktion oder Methode die verantwortlich ist für das Erzeugen von Objekten eines bestimmten Typs.
- Es ist nicht verpflichtend, aber empfohlen, die Funktion oder Methode eine Abstraktion (Schnittstelle oder eine abstrakte Klasse) gibt.
Stellen Sie sich eine Pizza Shop benötigt eine Software, die Sie benötigen, um eine Reihe von Produkten (Pizza variiert) haben. Als Designer sind wir gut sind, kann die Pizza Objekt-Erstellung von jedem beliebigen Ort in das Projekt durchgeführt werden, aber das Problem ist, dass es viele Arten von Pizzen. Um jede Pizza für jeden Typ in verschiedenen Teilen des Programms zu erstellen wäre das erste, was würden Sie denken, aber ... Wenn wir stattdessen mit gesundem Menschenverstand und wenden Sie das Werk?, Würde dies uns als neues Produkt oder eine Änderung des Inhalts von ihnen erlauben dass nur Veränderungen an einem Ort, unter mehr kontrolliert diesen Code. Selbst wenn Sie erkennen, das Tempo der Veränderungen ist viel mehr zu gehen Ändern aller möglichen Erscheinungen unserer Pizzas durch den Code.
Na ja, wäre das Werk verantwortlich für die Erstellung aller Arten von Pizzen und bieten alle möglichen Punkte des Programms.
Unser Beispiel wäre:
- Die Schnittstelle IPizza:
IPizza Schnittstelle
{
WhoAmI void ();
}
- Die einzelnen Pizzen:
public class PizzaBarbacoa: IPizza
{
# Region Mitglieder IPizza
public void WhoAmI ()
{
Console.WriteLine ("Ich bin ein BBQ Pizza");
}
# Endregion
}
public class PizzaMargarita: IPizza
{
# Region Mitglieder IPizza
public void WhoAmI ()
{
Console.WriteLine ("Ich bin eine Pizza Margarita");
}
# Endregion
}
public class PizzaPepperoni: IPizza
{
# Region Mitglieder IPizza
public void WhoAmI ()
{
Console.WriteLine ("Ich bin ein Pizza Pepperoni");
}
# Endregion
}
- Die Anlage in Frage:
public class PizzaFactory
{
public enum tipoPizza
{
Pepperoni, Margherita, Barbeque
}
IPizza öffentlichen getPizza (tipoPizza Typ)
{
Schalter (Typ)
{
tipoPizza.Barbacoa Fall:
return new PizzaBarbacoa ();
zu brechen;
tipoPizza.Margarita Fall:
return new PizzaMargarita ();
zu brechen;
tipoPizza.Pepperoni Fall:
return new PizzaPepperoni ();
zu brechen;
Standard:
return new PizzaBarbacoa ();
}
}
}
- Ein kleiner Test:
public class Test
{
public void testPizza ()
{
/ / Beispiel nicht mit werkseitig
IPizza pizza1 = new PizzaBarbacoa ();
pizza1.quienSoy ();
IPizza pizza2 = new PizzaMargarita ();
pizza2.quienSoy ();
IPizza pizza3 = new PizzaPepperoni ();
pizza3.quienSoy ();
IPizza pizza4 = new PizzaBarbacoa ();
pizza4.quienSoy ();
IPizza pizza5 = new PizzaMargarita ();
pizza5.quienSoy ();
/ / Beispiel mit werkseitig
PizzaFactory PizzaFactory factory = new ();
IPizza pizza6 = factory.getPizza (PizzaFactory.tipoPizza.Barbacoa);
pizza6.quienSoy ();
IPizza pizza7 = factory.getPizza (PizzaFactory.tipoPizza.Margarita);
pizza7.quienSoy ();
IPizza pizza8 = factory.getPizza (PizzaFactory.tipoPizza.Pepperoni);
pizza8.quienSoy ();
}
}
Wie Sie sehen können, wie Sie und ihre Vorteile sind besser. Ich hoffe euch gefällt!. See you later!






