在我正在学习的课程中,PizzaStore使用一个simplePizzaFactory类来处理具体的披萨实例化,用下面的图表描述(如课程材料中所提供的):

我用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")问题:
(从课程材料中)概括:

我知道第一个箭头是聚合(因为创建了simplePizzaFactory的一个对象并将其作为参数发送给PizzaStore ),但是第二个箭头也是如何聚合的呢?难道做一个虚线依赖箭头不是更有意义吗?
如果我对第一支箭不正确的话,我希望能对这部分和我的理解有更多的澄清。如对守则有任何评论,亦会不胜感激。
发布于 2020-09-09 07:52:04
--我理解第一个箭头是聚合(因为创建了simplePizzaFactory的一个对象,并将其作为参数发送给PizzaStore )
这并不是因为PizzaStore (客户端)的构造函数(或任何其他方法)接收到存在第一个聚合甚至简单关联的SimplePizzaFactory实例。
对我来说,这两个集合都是错误的。
aggregation
图表可以是(Pizza是抽象的,但它可能是一个接口?):

注意,在您的第一个图表中,SimplePizzaFactory和Pizza之间的关系也是错误的,因为在SimplePizzaFactory中没有属性来记忆Pizza的实例,相反,对于具有保存SimplePizzaFactory实例的属性的PizzaStore来说,使用依赖原型创建是非常清楚的。
https://stackoverflow.com/questions/63802394
复制相似问题