在我正在学习的课程中,一个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),但是第二个箭头怎么也是聚合呢?做一个虚线依赖箭头不是更有意义吗
如果我对第一支箭的看法不正确,我希望对这一部分和我的理解有更多的澄清。 如对守则有任何意见,将不胜感激
这并不是因为PizzaStore(客户端)的构造函数(或任何其他方法)接收到SimplePizzaFactory的实例,即存在第一次聚合,甚至不存在简单关联
对我来说,这两个聚合都是错误的
图表可以是(Pizza是抽象的,但也可以是接口?):
请注意,在第一个图表中,SimplePizzaFactory和Pizza之间的关系也是错误的,因为SimplePizzaFactory中没有用于存储Pizza实例的属性,而PizzaStore具有用于保存SimplePizzaFactory*实例的属性,使用依赖原型create非常清楚
相关问题 更多 >
编程相关推荐