工厂方法模式

简介: 工厂方法模式是一种创建型设计模式,通过定义创建对象的接口,由子类决定实例化哪个类。它将对象的创建延迟到子类,实现解耦,提升扩展性与灵活性,符合开闭原则,适用于需要动态确定对象类型的场景。

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供一个接口用于创建对象,但由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类,从而使得代码更加灵活和可扩展。

  1. 工厂方法模式的结构
    工厂方法模式通常包含以下几个角色:

产品接口(Product):定义了工厂方法所创建的对象的接口。
具体产品(ConcreteProduct):实现了产品接口的具体类。
工厂接口(Creator):声明了一个工厂方法,返回一个产品对象。
具体工厂(ConcreteCreator):实现工厂接口,负责创建具体产品的实例。

  1. 工厂方法模式的 UML 图
    plaintext
    +-----------------+
    |     Creator     |
    +-----------------+
    | + factoryMethod()|
    +-----------------+
           / \
            |
    +-----------------+
    |                 |
    
    +-----------------+ +-----------------+
    | ConcreteCreator | | ConcreteCreator2|
    +-----------------+ +-----------------+
    | + factoryMethod()| | + factoryMethod()|
    +-----------------+ +-----------------+
      |                     |
      v                     v
    
    +-----------------+ +-----------------+
    | ConcreteProduct | | ConcreteProduct2|
    +-----------------+ +-----------------+
  2. 工厂方法模式的实现
    以下是一个 Python 中工厂方法模式的简单示例:

3.1 定义产品接口
python
from abc import ABC, abstractmethod

class Product(ABC):
@abstractmethod
def operation(self) -> str:
pass
3.2 实现具体产品
python
class ConcreteProductA(Product):
def operation(self) -> str:
return "Result of ConcreteProductA"

class ConcreteProductB(Product):
def operation(self) -> str:
return "Result of ConcreteProductB"
3.3 定义工厂接口
python
class Creator(ABC):
@abstractmethod
def factory_method(self) -> Product:
pass

def some_operation(self) -> str:
    product = self.factory_method()
    return f"Creator: The same creator's code has just worked with {product.operation()}"

3.4 实现具体工厂
python
class ConcreteCreatorA(Creator):
def factory_method(self) -> Product:
return ConcreteProductA()

class ConcreteCreatorB(Creator):
def factory_method(self) -> Product:
return ConcreteProductB()
3.5 使用工厂方法
python
def client_code(creator: Creator) -> None:
print(creator.some_operation())

if name == "main":
creator_a = ConcreteCreatorA()
client_code(creator_a) # 输出: Creator: The same creator's code has just worked with Result of ConcreteProductA

creator_b = ConcreteCreatorB()
client_code(creator_b)  # 输出: Creator: The same creator's code has just worked with Result of ConcreteProductB
  1. 工厂方法模式的优缺点
    优点
    解耦:客户端代码与具体产品的实现细节解耦,便于扩展和维护。
    提高灵活性:可以根据实际需要添加新的产品,而无需修改已有代码。
    符合开闭原则:对扩展开放,对修改关闭,可以在不修改现有代码的情况下添加新产品。
    缺点
    增加复杂性:引入额外的类和接口可能会导致系统的复杂性增加。
    难以理解:对于简单场景,工厂方法模式可能显得过于复杂。
  2. 何时使用工厂方法模式
    当一个类不知道它所需要的对象的类时。
    当一个类希望通过子类来指定它所创建的对象时。
    当一个类要将实例化操作延迟到子类时。
  3. 总结
    工厂方法模式是软件设计中的一种重要模式,通过定义一个创建对象的接口,使得子类决定具体的实例化过程,从而提高了代码的灵活性和可维护性。在实际开发中,根据需求合理选择是否使用工厂方法模式,有助于构建更清晰和可扩展的系统。
相关文章
|
13天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
644 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
348 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
359 155

热门文章

最新文章