Что такое шаблон проектирования фабрика, синглтон, наблюдатель? (OOP) - PullRequest
1 голос
/ 26 мая 2020

Предположим, что в будущем будет больше пицц. Что было бы лучше, чтобы сделать мой код более надежным и избежать зависимости от конкретных классов из класса 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) оставить его как есть?

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Вы объединяете "создание" пиццы и "приготовление" вместе в этом одном методе.

  1. Вы можете разделить их, чтобы начать с
  2. Вы можете подумать об использовании параметризованного фабричного метода для создания всех типов пиццы
  3. Если в будущем вы решите добавить собственное создание пиццы, имеет смысл использовать шаблон Builder
2 голосов
/ 26 мая 2020

Я считаю, что то, что вы здесь делаете, называется «паттерном фасада», и ИМХО, он лучше всего подходит для этой цели - однако я бы реализовал его несколько иначе:

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
...