Aggregation oder Abhängigkeit in der Simple Factory (UML)
In einem Kurs, an dem ich teilnehme, PizzaStoreverwendet a eine simplePizzaFactoryKlasse, die die konkrete Pizza-Instanziierung behandelt und anhand des folgenden Diagramms beschrieben wird (wie im Kursmaterial angegeben):
Code, den ich in Python neu geschrieben habe:
# Pizza's superclass and it's subclasses are defined elswhere
class SimplePizzaFactory:
def create_pizza(self,type_of_pizza):
if type_of_pizza == "cheese":
pizza = CheesePizza()
elif type_of_pizza == "pepperoni":
pizza = PepperoniPizza()
elif type_of_pizza == "clam":
pizza = ClamPizza()
elif type_of_pizza == "viggie":
pizza = ViggiePizza()
else:
raise Exception("You need to specify a type of pizza.")
return pizza
class PizzaStore:
def __init__(self, pizza_factory_obj):
self.pizza_factory_obj = pizza_factory_obj
def order_pizza(self,type_of_pizza):
type_of_pizza = type_of_pizza.lower()
pizza = self.pizza_factory_obj.create_pizza(type_of_pizza)
pizza.prepare()
pizza.bake()
pizza.box()
return pizza
print("========================================================")
factory = SimplePizzaFactory()
store = PizzaStore(factory)
store.order_pizza("Cheese")
store.order_pizza("viggie")
Frage:
Verallgemeinert durch (aus dem Kursmaterial):
Ich würde verstehen, dass der erste Pfeil eine Aggregation ist (da ein Objekt der simplePizzaFactory erstellt und als Argument an den PizzaStore gesendet wird), aber wie ist der zweite Pfeil auch eine Aggregation? Sollte es nicht sinnvoller sein, ein gepunkteter Abhängigkeitspfeil zu sein?
Ich würde mich über weitere Erläuterungen zu diesem Teil und zu meinem Verständnis freuen, wenn ich mich in Bezug auf den ersten Pfeil geirrt hätte. Kommentare zum Code sind ebenfalls willkommen
Antworten
Ich würde verstehen, dass der erste Pfeil Aggregation ist (da ein Objekt der simplePizzaFactory erstellt und als Argument an den PizzaStore gesendet wird)
Dies liegt nicht daran, dass der Konstruktor (oder eine andere Methode) des PizzaStore ( Client ) eine Instanz der SimplePizzaFactory erhält, dass es die erste Aggregation oder sogar eine einfache Zuordnung gibt.
Für mich sind beide Aggregationen falsch.
- Die SimpleFactory kennt den Client nicht, der sie verwendet, daher gibt es erst recht keine Aggregation
- Das Produkt kennt die SimpleFactory nicht, die es erstellt, daher gibt es erst recht keine Aggregation.
Das Diagramm kann sein ( Pizza ist abstrakt, aber kann es eine Schnittstelle sein ?):
Beachten Sie in Ihrem ersten Diagramm, dass die Beziehung zwischen SimplePizzaFactory und Pizza auch insofern falsch ist, als es in SimplePizzaFactory kein Attribut zum Speichern von Instanzen von Pizza gibt. Im Gegensatz zu PizzaStore , das ein Attribut zum Speichern einer Instanz von SimplePizzaFactory * hat, ist es sehr klar, a zu verwenden Abhängigkeit stereotyp erstellen .