Python版简单工厂模式
什么是简单工厂模式?
简单工厂模式是一种创建型设计模式,用于根据参数的不同来创建不同的产品类的对象。简单工厂模式将对象创建的过程封装在一个工厂类中,客户端只需提供工厂类需要的参数,即可得到所需的对象实例。简单工厂模式是一种相对简单易用的设计模式,适用于需要创建的对象比较少的情况下。
简单工厂模式的实现
简单工厂模式的实现需要定义三个角色:产品类、工厂类和客户端。
- 产品类:
指的是工厂类所创建的对象的基类或接口。在Java中通常采用接口的方式来定义产品类。
- 工厂类:
负责创建不同的产品类的对象并返回这些对象的实例。工厂类中通常包含一个静态方法,根据不同的参数创建不同的对象实例。
- 客户端:
通过工厂类来获取所需要的对象实例。
下面实现一个简单的Python版简单工厂模式。
示例1
在这个示例中,我创建了一个 Animal
类作为产品类,并定义了两个子类 Cat
和 Dog
。然后创建了一个 AnimalFactory
类作为工厂类,其中的 create_animal
方法根据不同的参数类型实例化不同的对象。
class Animal:
def speak(self):
pass
class Cat(Animal):
def speak(self):
return "Meow"
class Dog(Animal):
def speak(self):
return "Woof"
class AnimalFactory:
def create_animal(self, animal_type):
if animal_type == "cat":
return Cat()
elif animal_type == "dog":
return Dog()
else:
return None
使用示例:
factory = AnimalFactory()
cat = factory.create_animal("cat")
print(cat.speak()) # 输出 "Meow"
dog = factory.create_animal("dog")
print(dog.speak()) # 输出 "Woof"
示例2
在这个示例中,我创建了一个 Operation
类作为产品类,并定义了几个子类,分别对应加、减、乘、除四种运算操作。然后创建了一个 OperationFactory
类作为工厂类,其中的 create_operation
方法根据不同的参数类型实例化不同的对象。
class Operation:
def get_result(self, num1, num2):
pass
class Add(Operation):
def get_result(self, num1, num2):
return num1 + num2
class Sub(Operation):
def get_result(self, num1, num2):
return num1 - num2
class Mul(Operation):
def get_result(self, num1, num2):
return num1 * num2
class Div(Operation):
def get_result(self, num1, num2):
if num2 == 0:
return None
else:
return num1 / num2
class OperationFactory:
def create_operation(self, op_type):
if op_type == "+":
return Add()
elif op_type == "-":
return Sub()
elif op_type == "*":
return Mul()
elif op_type == "/":
return Div()
else:
return None
使用示例:
factory = OperationFactory()
add = factory.create_operation("+")
print(add.get_result(1, 2)) # 输出 3
sub = factory.create_operation("-")
print(sub.get_result(2, 1)) # 输出 1
mul = factory.create_operation("*")
print(mul.get_result(2, 3)) # 输出 6
div = factory.create_operation("/")
print(div.get_result(2, 0)) # 输出 None
print(div.get_result(10, 2)) # 输出 5.0
总结
以上就是Python版简单工厂模式的实现方法和两个示例。简单工厂模式的优点是可以减少客户端和产品类之间的耦合度,并且对于工厂类的修改不会对客户端代码造成影响。但是缺点是当需要添加新的产品类时,需要修改工厂类的代码,不符合“开闭原则”。另外,简单工厂模式也不太适用于需要创建的对象比较多的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python版简单工厂模式 - Python技术站