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

问题描述

在我正在上的一门课程中,一个PizzaStore使用一个simplePizzaFactory类来处理具体的比萨饼实例,如下图所示(在课程资料中提供):

enter image description here

我在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")

问题:

(根据课程资料)概括:

enter image description here

我知道第一个箭头是聚合(因为创建了simplePizzaFactory的对象并将其作为参数发送给PizzaStore),但是第二个箭头又是如何聚合的呢?虚线的依赖箭头应该更有意义吗?

如果我对第一个箭头的理解不正确,请多加说明。 对代码的任何评论也将不胜感激

解决方法

我知道第一个箭头是聚合(因为创建了simplePizzaFactory的对象并将其作为参数发送给PizzaStore)

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

对我来说,这两种汇总都是错误的。

  • SimpleFactory 不知道使用它的 Client ,因此,没有聚集的优势
  • Product 不知道创建它的 SimpleFactory ,因此,没有任何聚集。

该图可以是( Pizza 抽象,但可能是接口吗?):

enter image description here

请注意,在第一张图中, SimplePizzaFactory Pizza 之间的关系也是错误的,因为在 SimplePizzaFactory 中没有属性来存储实例与 PizzaStore 具有属性以保存SimplePizzaFactory *实例的属性相反,很明显,使用了构造型为 create 的依赖项。 / p>