刘刚刚的个人博客

HeadFirst 设计模式--工厂模式

创建时间:2022-11-08 00:15:43
更新时间:2022-11-08 23:25:01

当想让将实例化具体类的代码从具体的类中解耦时使用

示例

书中通过pizza分店的例子,介绍了工厂模式的使用。在pizza店中,每个店披萨的风味都不同.

与简单工厂不同的是:

工厂模式定义了一个类的接口(PizzaStore),但由创建者(NYPizzaStore)决定要实例化的类是那一个(披萨类的实现).

在例子中:NYPizzaStore可以实例化任何Pizza子类的实例

from abc import abstractmethod, ABCMeta


class Pizza(ABCMeta):
    name = None
    dough = None
    sauce = None
    topping = []

    def prepare(self):
        print("准备" + self.name)
        print("添加面团")
        print("添加佐料")
        print("添加其他材料:")
        for i in self.topping:
            print(i)

    def bake(self):
        print("300度,烘烤25分钟")

    def cut(self):
        print("斜着切3次")

    def box(self):
        print("包装")


class NYStyleCheesePizza(Pizza):

    def __init__(self):
        self.name = "芝士披萨"
        self.dough = "薄饼"
        self.sauce = "...."
        self.topping.add("...")


class PizzaStore(ABCMeta):

    def order_pizza(self, pizza_type):
        pizza = self.create_pizza(pizza_type)
        pizza.prepare()
        pizza.bake()
        pizza.cut()
        pizza.box()
        return pizza

    @abstractmethod
    def createPizza(self, pizza_type):
        pass


class NYPizzaStore(Pizza):

    def create_pizza(self, pizza_type):
        if pizza_type == "cheese":
            res = NYStyleCheesePizza()

        return res
我的名片

昵称:shuta

职业:后台开发(python、php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号