什么是工厂,单例,观察者设计模式? (OOP)

问题描述 投票:1回答:2

假设将来会有更多的披萨。为了使我的代码更健壮并避免依赖于Pizza类的具体类,哪种方法更好?

class Pizza:
    def order(pizza_type):
        pizza = none
        if pizza_type == "cheese":
            pizza = CheezePizza()
        elif pizza_type == "pepperoni":
            pizza = PepperoniPizza()
        elif pizza_type == "veggie":
            pizza = VeggiePizza()
        pizza.prepare()
        pizza.bake()
        return pizza

最好使用1)工厂方法设计模式,2)单例设计模式或3)观察者设计模式或4)保持原样?

python class object design-patterns singleton
2个回答
2
投票

[我相信您在这里所做的被称为“外观模式”,恕我直言,它最适合此目的-但是,我会稍微不同地实现它:

class Pizza:
    pizza_types = {
                    "cheese": CheesePizza, 
                    "pepperoni": PepperoniPizza,
                    "veggie": VeggiePizza 
                  }
    def order(pizza_type):
        pizza_constructor = Pizza.pizza_types.get(pizza_type) 
        pizza = pizza_constructor() # instantiate the right type of pizza
        pizza.prepare()
        pizza.bake()
        return pizza

2
投票

您正在通过这种方法将比萨饼的“创造”和“准备”结合在一起。

  1. 您可以将它们分开以开始
  2. 您可以考虑使用参数化的工厂方法来创建所有披萨类型
  3. 如果将来决定添加自定义披萨制作,那么使用Builder模式是有意义的
© www.soinside.com 2019 - 2024. All rights reserved.