抽象工厂模式

简介: 抽象工厂模式是一种创建型设计模式,用于创建一系列相关或依赖对象,而无需指定具体类。它通过抽象工厂和产品族的结构,提升系统封装性与扩展性,适用于多产品族场景,如UI组件或数据库连接,增强代码灵活性与可维护性。(238字)

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供一���接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这种模式常用于需要创建多个家族产品的场景,比如不同风格的 UI 组件、不同类型的数据库连接等。

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

抽象工厂(Abstract Factory):声明创建抽象产品的方法。
具体工厂(Concrete Factory):实现抽象工厂接口,创建具体产品的实例。
抽象产品(Abstract Product):定义产品的接口。
具体产品(Concrete Product):实现抽象产品接口的具体类。

  1. 抽象工厂模式的 UML 图
    plaintext
    +---------------------+
    |   AbstractFactory    |
    +---------------------+
    | + create_product_a() |
    | + create_product_b() |
    +---------------------+
           / \
            |
    
    +----------+----------+
    | |
    +-------------------+ +-------------------+
    | ConcreteFactoryA | | ConcreteFactoryB |
    +-------------------+ +-------------------+
    | + create_product_a() | | + create_product_a() |
    | + create_product_b() | | + create_product_b() |
    +-------------------+ +-------------------+
    | |
    v v
    +-------------------+ +-------------------+
    | ConcreteProductA1 | | ConcreteProductB1 |
    +-------------------+ +-------------------+
    | | | |
    +-------------------+ +-------------------+
  2. 抽象工厂模式的实现
    以下是一个 Python 中抽象工厂模式的简单示例:

3.1 定义抽象产品
python
from abc import ABC, abstractmethod

class AbstractProductA(ABC):
@abstractmethod
def useful_function_a(self) -> str:
pass

class AbstractProductB(ABC):
@abstractmethod
def useful_function_b(self) -> str:
pass

@abstractmethod
def another_useful_function_b(self, collaborator: AbstractProductA) -> str:
    pass

3.2 实现具体产品
python
class ConcreteProductA1(AbstractProductA):
def useful_function_a(self) -> str:
return "Result of ConcreteProductA1"

class ConcreteProductA2(AbstractProductA):
def useful_function_a(self) -> str:
return "Result of ConcreteProductA2"

class ConcreteProductB1(AbstractProductB):
def useful_function_b(self) -> str:
return "Result of ConcreteProductB1"

def another_useful_function_b(self, collaborator: AbstractProductA) -> str:
    result = collaborator.useful_function_a()
    return f"Result of ConcreteProductB1 collaborating with ({result})"

class ConcreteProductB2(AbstractProductB):
def useful_function_b(self) -> str:
return "Result of ConcreteProductB2"

def another_useful_function_b(self, collaborator: AbstractProductA) -> str:
    result = collaborator.useful_function_a()
    return f"Result of ConcreteProductB2 collaborating with ({result})"

3.3 定义抽象工厂
python
class AbstractFactory(ABC):
@abstractmethod
def create_product_a(self) -> AbstractProductA:
pass

@abstractmethod
def create_product_b(self) -> AbstractProductB:
    pass

3.4 实现具体工厂
python
class ConcreteFactoryA(AbstractFactory):
def create_product_a(self) -> AbstractProductA:
return ConcreteProductA1()

def create_product_b(self) -> AbstractProductB:
    return ConcreteProductB1()

class ConcreteFactoryB(AbstractFactory):
def create_product_a(self) -> AbstractProductA:
return ConcreteProductA2()

def create_product_b(self) -> AbstractProductB:
    return ConcreteProductB2()

3.5 使用抽象工厂
python
def client_code(factory: AbstractFactory) -> None:
product_a = factory.create_product_a()
product_b = factory.create_product_b()

print(product_b.useful_function_b())
print(product_b.another_useful_function_b(product_a))

if name == "main":
print("Client: Testing client code with the first factory:")
factory_a = ConcreteFactoryA()
client_code(factory_a)

print("\nClient: Testing client code with the second factory:")
factory_b = ConcreteFactoryB()
client_code(factory_b)
  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

热门文章

最新文章