设计模式(Python语言)----工厂方法模式

1. 简介

工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建委托给子类的方式。这样,客户端主要通过使用基类的接口来操作对象,而不是直接实例化他们。工厂方法模式的核心思想是封装对象的创建过程,并将其延迟到子类来完成。

2. 工厂方法模式的结构

2.1. 抽象产品(Product)类

抽象产品类定义了产品对象的共同接口,它包含了产品类的公共方法声明。

class Product:

def operation(self):

pass

2.2. 具体产品(Concrete Product)类

具体产品类是抽象产品类的子类,实现了抽象产品类定义的接口。

class ConcreteProduct(Product):

def operation(self):

return "具体产品的操作"

2.3. 抽象工厂(Creator)类

抽象工厂类是工厂方法模式的核心,它声明了创建产品对象的工厂方法,返回一个抽象产品对象。

class Creator:

def factory_method(self):

pass

def some_operation(self):

product = self.factory_method()

return product.operation()

2.4. 具体工厂(Concrete Creator)类

具体工厂类是抽象工厂类的子类,实现了抽象工厂类定义的工厂方法,返回一个具体产品对象。

class ConcreteCreator(Creator):

def factory_method(self):

return ConcreteProduct()

3. 工厂方法模式的使用场景

工厂方法模式在以下情况下可以使用:

当一个类无法预知它必须创建的对象的具体类型时

当一个类希望由它的子类来决定要创建的对象的类型时

当一个类将创建对象的职责委托给多个帮助子类中的某一个,并希望将哪个子类使用的信息局部化时

工厂方法模式可以将对象的创建与使用代码分离,降低了代码的耦合度,使得代码更易于维护和扩展。

4. 示例

假设有一个应用程序需要创建和操作各种不同类型的文档,包括PDF文档、Word文档和Excel文档。通过工厂方法模式,可以将文档创建的过程封装到一个抽象工厂类中,具体类型的文档创建由子类实现。

首先,定义抽象产品类Document

class Document:

def create(self):

pass

然后,定义具体产品类PDFDocumentWordDocumentExcelDocument

class PDFDocument(Document):

def create(self):

return "创建PDF文档"

class WordDocument(Document):

def create(self):

return "创建Word文档"

class ExcelDocument(Document):

def create(self):

return "创建Excel文档"

接下来,定义抽象工厂类DocumentFactory

class DocumentFactory:

def create_document(self):

pass

def some_operation(self):

document = self.create_document()

return document.create()

最后,定义具体工厂类PDFDocumentFactoryWordDocumentFactoryExcelDocumentFactory

class PDFDocumentFactory(DocumentFactory):

def create_document(self):

return PDFDocument()

class WordDocumentFactory(DocumentFactory):

def create_document(self):

return WordDocument()

class ExcelDocumentFactory(DocumentFactory):

def create_document(self):

return ExcelDocument()

使用工厂方法模式创建和操作文档:

pdf_factory = PDFDocumentFactory()

pdf_document = pdf_factory.some_operation()

print(pdf_document) # 输出:创建PDF文档

word_factory = WordDocumentFactory()

word_document = word_factory.some_operation()

print(word_document) # 输出:创建Word文档

excel_factory = ExcelDocumentFactory()

excel_document = excel_factory.some_operation()

print(excel_document) # 输出:创建Excel文档

从上面的代码示例中可以看出,客户端主要通过抽象工厂类DocumentFactory和抽象产品类Document进行操作,而不需要关心具体的文档类型是如何创建的。

5. 总结

工厂方法模式是一种创建型设计模式,它通过将对象的创建委托给子类来封装对象的创建过程。工厂方法模式可以降低代码的耦合度,使得代码更易于维护和扩展。在合适的场景下,使用工厂方法模式可以提供更灵活和可扩展的设计。

后端开发标签