如何解决简单工厂UML中的聚合或依赖
在我正在上的一门课程中,一个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),但是第二个箭头又是如何聚合的呢?虚线的依赖箭头应该更有意义吗?
如果我对第一个箭头的理解不正确,请多加说明。 对代码的任何评论也将不胜感激
解决方法
我知道第一个箭头是聚合(因为创建了simplePizzaFactory的对象并将其作为参数发送给PizzaStore)
这不是因为 PizzaStore ( Client )的构造函数(或任何其他方法)收到了 SimplePizzaFactory 的实例是第一次聚合,甚至不是简单的关联。
对我来说,这两种汇总都是错误的。
- SimpleFactory 不知道使用它的 Client ,因此,没有聚集的优势
- Product 不知道创建它的 SimpleFactory ,因此,没有任何聚集。
该图可以是( Pizza 是抽象,但可能是接口吗?):
请注意,在第一张图中, SimplePizzaFactory 和 Pizza 之间的关系也是错误的,因为在 SimplePizzaFactory 中没有属性来存储实例与 PizzaStore 具有属性以保存SimplePizzaFactory *实例的属性相反,很明显,使用了构造型为 create 的依赖项。 / p>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。