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

2024-09-29 17:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

在我正在学习的课程中,一个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),但是第二个箭头怎么也是聚合呢?做一个虚线依赖箭头不是更有意义吗

如果我对第一支箭的看法不正确,我希望对这一部分和我的理解有更多的澄清。 如对守则有任何意见,将不胜感激


Tags: ofstoreselfobjfactorydeftypeorder
1条回答
网友
1楼 · 发布于 2024-09-29 17:21:42

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客户端)的构造函数(或任何其他方法)接收到SimplePizzaFactory的实例,即存在第一次聚合,甚至不存在简单关联

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

  • SimpleFactory不知道客户机在使用它,因此更重要的是没有聚合
  • 产品不知道创建它的SimpleFactory,因此更重要的是没有聚合

图表可以是(Pizza抽象的,但也可以是接口?):

enter image description here

请注意,在第一个图表中,SimplePizzaFactoryPizza之间的关系也是错误的,因为SimplePizzaFactory中没有用于存储Pizza实例的属性,而PizzaStore具有用于保存SimplePizzaFactory*实例的属性,使用依赖原型create非常清楚

相关问题 更多 >

    热门问题