一、什么是创建型工厂模式?
创建型工厂模式是一种常见的设计模式,它可以在不直接实例化对象的情况下,通过一个工厂函数或者方法来创建对象,隐藏了对象的创建细节,降低了耦合度,提高了代码的可维护性和可扩展性。工厂模式是一种创建型模式,它定义了一个用于创建对象的接口,让子类决定实例化哪个类。工厂模式可以将一个系统中的所有产品共同的处理方式,抽象成一个接口,从而降低系统的耦合度,提高了扩展性。
二、如何使用工厂模式?
在工厂模式中,我们需要定义一个工厂类,这个工厂类可以生产不同类型的对象,对象由同一个基类创建,每个对象有不同的属性,方法,实现不同的功能。下面我们来看一个简单的例子。
示例1:创建一个圆形对象和矩形对象,这两个对象都属于图形类型,但是它们具有不同的属性和方法。
class Shape:
def draw(self):
pass
class Circle(Shape):
def draw(self):
print("画一个圆形")
class Rectangle(Shape):
def draw(self):
print("画一个矩形")
我们定义了一个图形基类Shape,其中包含一个抽象方法draw()。我们还定义了两个子类Circle和Rectangle,分别实现了基类中的抽象方法draw(),并分别实现了自己的画图方法。
接下来我们定义一个图形工厂类,它可以根据不同的参数生产不同类型的图形对象。
class ShapeFactory:
def createShape(self, shapeType):
if shapeType == "CIRCLE":
return Circle()
elif shapeType == "RECTANGLE":
return Rectangle()
else:
return None
在工厂类中,我们定义了一个createShape()方法,它可以根据不同的参数来创建不同类型的对象。如果传入参数是"CIRCLE",则返回一个圆形对象,如果是"RECTANGLE",则返回一个矩形对象。
示例2:创建一个计算器对象,这个对象可以进行加、减、乘、除四种运算,每种运算有不同的实现方法。
class Calculator:
def calculate(self, operator, a, b):
pass
class Add(Calculator):
def calculate(self, a, b):
return a + b
class Subtract(Calculator):
def calculate(self, a, b):
return a - b
class Multiply(Calculator):
def calculate(self, a, b):
return a * b
class Divide(Calculator):
def calculate(self, a, b):
if b == 0:
return None
else:
return a / b
我们定义了一个计算器基类Calculator,其中包含了一个抽象方法calculate()。我们还定义了四个子类Add、Subtract、Multiply和Divide分别表示加、减、乘、除这四种运算,每个子类实现了自己的计算方法。
接下来我们定义一个计算器工厂类,它可以根据不同的参数来创建不同类型的计算器对象。
class CalculatorFactory:
def createCalculator(self, operator):
if operator == "+":
return Add()
elif operator == "-":
return Subtract()
elif operator == "*":
return Multiply()
elif operator == "/":
return Divide()
else:
return None
在工厂类中,我们定义了一个createCalculator()方法,它可以根据不同的参数来创建不同类型的计算器对象。如果传入参数是"+",则返回一个加法计算器对象,如果是"-",则返回一个减法计算器对象,依此类推。
三、实现效果
通过使用工厂模式,在保持系统灵活性和可扩展性的同时,也提高了代码的可维护性和可读性。在上面的两个示例中,我们分别定义了图形工厂类和计算器工厂类,这两个工厂类分别可以根据不同的参数来创建不同类型的对象,这种设计方法可以简化对象的创建过程,并且将创建过程和使用过程分离,让代码更加清晰易懂。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python设计模式中的创建型工厂模式 - Python技术站