当前位置: 首页 > news >正文

python工厂模式

工厂模式简介

工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离。其核心思想是通过一个工厂类来负责创建对象,而不是在客户端代码中直接实例化对象。这样做的好处有:

  • 降低耦合度:客户端代码不需要知道具体的对象创建细节,只需要向工厂请求所需的对象,减少了代码之间的依赖。
  • 提高可维护性和可扩展性:当需要添加新的产品类型时,只需在工厂类中添加相应的创建逻辑,而不需要修改客户端代码。

下面以一段代码讲解一下实现细节:

实现一个产品基类:

import abc
from enum import Enum

# 定义一个抽象基类产品
class Product(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def operation(self):
        pass
  • 导入模块abc 模块用于创建抽象基类,enum 模块用于创建枚举类型。
  • 抽象基类 Product:使用 abc.ABCMeta 作为元类定义了一个抽象基类 Product,并使用 @abc.abstractmethod 装饰器定义了抽象方法 operation。这意味着所有继承自 Product 的具体类都必须实现 operation 方法。

继承抽象基类Product,并实现operation方法:

# 具体产品类 1
class ConcreteProduct1(Product):
    def operation(self):
        return "ConcreteProduct1 operation"

# 具体产品类 2
class ConcreteProduct2(Product):
    def operation(self):
        return "ConcreteProduct2 operation"
  • 具体产品类ConcreteProduct1 和 ConcreteProduct2 继承自 Product 抽象基类,并实现了 operation 方法。每个具体产品类都有自己独特的操作实现。

用枚举类型Enum定义产品的类型:

# 产品类型枚举
class ProductType(Enum):
    TYPE1 = 1
    TYPE2 = 2
  • 产品类型枚举:使用 enum.Enum 定义了一个枚举类 ProductType,用于表示不同类型的产品。这里定义了两种产品类型 TYPE1 和 TYPE2

创建一个工厂类实现生产细节:

# 工厂类
class Factory:
    @staticmethod
    def create_product(product_type):
        if product_type == ProductType.TYPE1:
            return ConcreteProduct1()
        elif product_type == ProductType.TYPE2:
            return ConcreteProduct2()
        else:
            raise ValueError("Invalid product type")
  • 工厂类 Factory:包含一个静态方法 create_product,该方法接受一个 product_type 参数,根据传入的产品类型创建相应的产品实例。如果传入的产品类型无效,会抛出 ValueError 异常。

工厂实例化,传入产品类型的参数,调用函数生产产品:

# 客户端代码
if __name__ == "__main__":
    product1 = Factory.create_product(ProductType.TYPE1)
    print(product1.operation())

    product2 = Factory.create_product(ProductType.TYPE2)
    print(product2.operation())

完整代码如下:

import abc
from enum import Enum


# 定义一个抽象基类产品
class Product(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def operation(self):
        pass


# 具体产品类 1
class ConcreteProduct1(Product):
    def operation(self):
        return "ConcreteProduct1 operation"


# 具体产品类 2
class ConcreteProduct2(Product):
    def operation(self):
        return "ConcreteProduct2 operation"


# 产品类型枚举
class ProductType(Enum):
    TYPE1 = 1
    TYPE2 = 2


# 工厂类
class Factory:
    @staticmethod
    def create_product(product_type):
        if product_type == ProductType.TYPE1:
            return ConcreteProduct1()
        elif product_type == ProductType.TYPE2:
            return ConcreteProduct2()
        else:
            raise ValueError("Invalid product type")


# 客户端代码
if __name__ == "__main__":
    product1 = Factory.create_product(ProductType.TYPE1)
    print(product1.operation())

    product2 = Factory.create_product(ProductType.TYPE2)
    print(product2.operation())
    

相关文章:

  • ML29_先验概率与边缘概率的对比
  • 【数据库相关MySql、Redis、MongoDB】
  • 【Git】--- Git远程操作 标签管理
  • 从零开始:使用Luatools工具高效烧录Air780EPM核心板项目的完整指南
  • PHP在2025年的新趋势与应用
  • 投sci论文自己查重方法
  • 拓展知识五:魔术方法
  • DIVA-GIS:一个免费的GIS分析小软件
  • C语言位操作符详解
  • 【无标题】大亚湾文化体育场多美啊。
  • python处理音频相关的库
  • 【工程记录】QwQ-32b 8bit量化部署教程(vLLM | 缓解复读)
  • 2.27省选模拟赛补题记录:直径(容斥,树形dp,换根dp)
  • Java 线程池全面解析
  • vue-将组件内容导出为Word文档-docx
  • StarRocks数据导入
  • 漏洞挖掘 --- Ollama未授权访问
  • 【区块链安全 | 第三篇】主流公链以太坊运行机制
  • PAT甲级(Advanced Level) Practice 1028 List Sorting
  • 【附代码】【MILP建模】3D装箱问题(3D-Bin Packing Problem)
  • 什么网站详情页做的好/教育培训机构十大排名
  • 专业建站推广服务/百度打开
  • 合肥电商网站开发/搜索引擎分哪三类
  • 专业型企业网站有哪些/推广赚钱软件排行
  • 做网站前产品经理要了解什么/seo的优化步骤
  • gbk编码网站/网站运营课程