python模式 工厂模式原理及实例详解

1. 工厂模式简介

工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但由具体实现类决定实例化哪个类。工厂模式将对象的创建与使用分离,客户端只需要知道接口,而不需要知道具体的实现类。

工厂模式主要包括三种类型:

简单工厂模式

工厂方法模式

抽象工厂模式

2. 简单工厂模式

简单工厂模式(Simple Factory Pattern)又称静态工厂方法模式,通过一个工厂类在运行时决定创建哪个具体的产品类。以下是一个简单的实例:

2.1 定义产品接口

class Product:

def __init__(self):

pass

def operation(self):

pass

2.2 定义具体产品

class ConcreteProductA(Product):

def operation(self):

return "ConcreteProductA"

class ConcreteProductB(Product):

def operation(self):

return "ConcreteProductB"

2.3 定义工厂类

class SimpleFactory:

def create_product(self, product_type):

if product_type == "A":

return ConcreteProductA()

elif product_type == "B":

return ConcreteProductB()

else:

raise ValueError("Invalid product type")

2.4 使用工厂创建产品

factory = SimpleFactory()

product1 = factory.create_product("A")

product1.operation() # Output: "ConcreteProductA"

product2 = factory.create_product("B")

product2.operation() # Output: "ConcreteProductB"

3. 工厂方法模式

工厂方法模式(Factory Method Pattern)是简单工厂模式的进一步抽象和推广。它定义了一个用于创建对象的接口,但将具体的实例化过程由工厂类推迟到了子类中。

3.1 定义产品接口和工厂接口

class Product:

def operation(self):

pass

class Factory:

def create_product(self):

pass

3.2 定义具体产品和具体工厂

class ConcreteProductA(Product):

def operation(self):

return "ConcreteProductA"

class ConcreteProductB(Product):

def operation(self):

return "ConcreteProductB"

class ConcreteFactoryA(Factory):

def create_product(self):

return ConcreteProductA()

class ConcreteFactoryB(Factory):

def create_product(self):

return ConcreteProductB()

3.3 使用工厂方法创建产品

factory_a = ConcreteFactoryA()

product_a = factory_a.create_product()

product_a.operation() # Output: "ConcreteProductA"

factory_b = ConcreteFactoryB()

product_b = factory_b.create_product()

product_b.operation() # Output: "ConcreteProductB"

4. 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它实现了一种“工厂的工厂”,即工厂类也可以创建其他工厂类。

4.1 定义抽象工厂接口和抽象产品接口

class AbstractFactory:

def create_product_a(self):

pass

def create_product_b(self):

pass

class AbstractProductA:

def operation(self):

pass

class AbstractProductB:

def operation(self):

pass

4.2 定义具体工厂和具体产品

class ConcreteFactoryA(AbstractFactory):

def create_product_a(self):

return ConcreteProductA()

def create_product_b(self):

return ConcreteProductB()

class ConcreteFactoryB(AbstractFactory):

def create_product_a(self):

return AnotherConcreteProductA()

def create_product_b(self):

return AnotherConcreteProductB()

class ConcreteProductA(AbstractProductA):

def operation(self):

return "ConcreteProductA"

class ConcreteProductB(AbstractProductB):

def operation(self):

return "ConcreteProductB"

class AnotherConcreteProductA(AbstractProductA):

def operation(self):

return "AnotherConcreteProductA"

class AnotherConcreteProductB(AbstractProductB):

def operation(self):

return "AnotherConcreteProductB"

4.3 使用抽象工厂创建产品

factory_a = ConcreteFactoryA()

product_a = factory_a.create_product_a()

product_a.operation() # Output: "ConcreteProductA"

product_b = factory_a.create_product_b()

product_b.operation() # Output: "ConcreteProductB"

factory_b = ConcreteFactoryB()

product_a = factory_b.create_product_a()

product_a.operation() # Output: "AnotherConcreteProductA"

product_b = factory_b.create_product_b()

product_b.operation() # Output: "AnotherConcreteProductB"

5. 总结

工厂模式是一种创建型设计模式,适用于创建复杂对象或一系列相关对象的场景。它将对象的创建过程封装在工厂类中,使用时只需要通过工厂类来创建对象,无需关心具体的实现细节。

简单工厂模式适用于创建单一类型的对象,工厂方法模式适用于创建一系列相关对象的场景,而抽象工厂模式适用于创建一系列相关或相互依赖的对象。

使用工厂模式可以提高代码的可维护性和扩展性,并且可以实现代码的解耦,降低代码的依赖性。

后端开发标签