【问题标题】:What is factory, singleton, observer design pattern? (OOP)什么是工厂、单例、观察者设计模式? (哎呀)
【发布时间】:2020-05-25 23:15:56
【问题描述】:

假设将来会有更多的比萨饼。为了使我的代码更健壮并避免依赖 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


    【解决方案1】:

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

    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
    

    【讨论】:

    • 谢谢,但我的问题是:使用 1) 工厂方法设计模式,2) 单例设计模式,或 3) 观察者设计模式或 4) 保持原样是否更好?
    • 那么“以上都不是”的答案是不可能的?
    【解决方案2】:

    您在这个方法中将披萨“制作”和“准备”结合在一起。

    1. 您可以先将它们分开
    2. 您可以考虑使用参数化工厂方法来创建所有披萨类型
    3. 如果将来您决定添加自定义披萨创建,那么使用 Builder 模式是有意义的

    【讨论】:

    • 那么与单例或任何其他方法相比,工厂方法是什么
    • 无法将工厂方法与单例进行比较,因为两者都有不同的实用程序......工厂方法将负责将对象返回给客户端,单例帮助维护每个应用程序的单个对象实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2010-12-31
    • 2011-11-25
    • 2011-09-25
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多