Python设计模式之工厂方法模式实例详解
什么是工厂方法模式?
工厂方法模式是一种创建型设计模式,它定义了一种用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式使一个类的实例化延迟到其子类。
工厂方法模式的优点有哪些?
- 保持了良好的封装性,让客户端不需要知道具体的产品类,只需要知道工厂类即可。
- 简化了系统的扩展性,客户端只需要知道新的具体产品类名即可,无须修改原有系统。
工厂方法模式的实现方法
在Python中,可以通过手写类的方式来实现工厂方法模式。
下面是一个简单的例子:
class Pizza:
def __init__(self, name):
self.name = name
def prepare(self):
pass
def bake(self):
pass
def cut(self):
pass
def box(self):
pass
class CheesePizza(Pizza):
def prepare(self):
print('Cheese Pizza prepared.')
class PepperoniPizza(Pizza):
def prepare(self):
print('Pepperoni Pizza prepared.')
class PizzaStore:
def order_pizza(self, type):
pizza = self.create_pizza(type)
pizza.prepare()
pizza.bake()
pizza.cut()
pizza.box()
def create_pizza(self, type):
pass
class NYPizzaStore(PizzaStore):
def create_pizza(self, type):
if type == 'cheese':
return CheesePizza('NY Style Cheese Pizza')
elif type == 'pepperoni':
return PepperoniPizza('NY Style Pepperoni Pizza')
class ChicagoPizzaStore(PizzaStore):
def create_pizza(self, type):
if type == 'cheese':
return CheesePizza('Chicago Style Cheese Pizza')
elif type == 'pepperoni':
return PepperoniPizza('Chicago Style Pepperoni Pizza')
上面的代码中,Pizza
是一个抽象基类,定义了披萨的名称、准备、烘烤、切割和包装方法。CheesePizza
和PepperoniPizza
是具体的披萨类,继承了Pizza
并重写了prepare
方法来完成具体的制作过程。PizzaStore
是一个抽象工厂类,定义了制作披萨的顺序,提供一个抽象方法来创建披萨。NYPizzaStore
和ChicagoPizzaStore
是具体的工厂类,继承了PizzaStore
并实现了create_pizza
方法,根据不同的输入类型创建不同的披萨。
这里我们来看看如何使用工厂方法模式来制作披萨。
ny_store = NYPizzaStore()
chicago_store = ChicagoPizzaStore()
ny_store.order_pizza('cheese')
chicago_store.order_pizza('pepperoni')
输出结果为
Cheese Pizza prepared.
Pepperoni Pizza prepared.
工厂方法模式的注意事项
- 不要滥用工厂方法模式,有时候使用工厂方法模式会带来过度的复杂性。
- 工厂方法模式通常会被用来代替类的直接实例化处理。
- 工厂方法模式在一些框架中被广泛应用,例如Django ORM框架使用工厂方法模式来创建数据库查询对象。
总结
工厂方法模式是一种创建型设计模式,主要应用于创建具有相同属性的一系列对象。通过将对象的创建和使用分开,可以方便地进行扩展和维护。
在Python中,我们可以使用类来实现工厂方法模式。通过定义抽象基类和具体类,以及抽象工厂类和具体工厂类,可以方便地创建不同类型的对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python设计模式之工厂方法模式实例详解 - Python技术站