HeadFirst 设计模式--工厂模式
当想让将实例化具体类的代码从具体的类中解耦时使用
示例
书中通过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
License:
CC BY 4.0