简单工厂 (UML) 中的聚合或依赖

Aggregation or Dependency in the Simple Factory (UML)

在我正在学习的课程中,PizzaStore 使用 simplePizzaFactory class 来处理具体的比萨饼实例化,如下图所示(如课程 material):

我在 python 中重写的代码:

# 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")

问题:

归纳(来自课程 material):

我明白第一个箭头是聚合(因为创建了一个 simplePizzaFactory 的对象并将其作为参数发送到 PizzaStore)但是第二个箭头怎么也是聚合?做一个虚线依赖箭头不是更有意义吗?

如果我对第一个箭头的理解不正确,我希望能对这部分和我的理解做出更多说明。 对代码的任何评论也将不胜感激

I'd understand that the first arrow is aggregation (since an object of the simplePizzaFactory is created and sent to the PizzaStore as an argument)

这不是因为 PizzaStore (Client) 的构造函数(或任何其他方法)接收到 SimplePizzaFactory 有第一个聚合,甚至没有简单的关联。

对我来说,这两种聚合都是错误的。

  • SimpleFactory 不知道 Client 使用它,因此更不用说没有聚合
  • Product 不知道 SimpleFactory 创建它,因此更不用说没有聚合了。

图表可以是(披萨抽象但也可能是界面 ?):

请注意,在您的第一个图中,SimplePizzaFactoryPizza 之间的关系也是错误的,因为 [=22] 中没有属性=]SimplePizzaFactory 来记忆 Pizza 的实例,相反 PizzaStore 具有保存 SimplePizzaFactory* 实例的属性,它是使用依赖刻板化 create.

就很清楚了