Python实现工厂模式

news/2024/7/3 4:54:46

工厂模式是一种创建对象的设计模式,它通过定义一个公共的工厂接口来创建对象,而不直接使用类的构造函数。在Python中,可以使用以下方式实现工厂模式:

class Product:
    def __init__(self):
        pass

    def operation(self):
        pass

class ConcreteProductA(Product):
    def operation(self):
        return "ConcreteProductA operation"

class ConcreteProductB(Product):
    def operation(self):
        return "ConcreteProductB operation"

class Factory:
    def create_product(self):
        pass

class ConcreteFactoryA(Factory):
    def create_product(self):
        return ConcreteProductA()

class ConcreteFactoryB(Factory):
    def create_product(self):
        return ConcreteProductB()

# 使用工厂模式创建对象
factory_a = ConcreteFactoryA()
product_a = factory_a.create_product()
print(product_a.operation())  # 输出: ConcreteProductA operation

factory_b = ConcreteFactoryB()
product_b = factory_b.create_product()
print(product_b.operation())  # 输出: ConcreteProductB operation

在上述代码中,Product 是产品的抽象基类,定义了产品的公共接口。ConcreteProductA 和 ConcreteProductB 是具体产品类,继承自 Product,并实现了具体的操作方法。

Factory 是工厂的抽象基类,定义了创建产品的接口。ConcreteFactoryA 和 ConcreteFactoryB 是具体工厂类,继承自 Factory,并实现了创建具体产品的方法。

通过创建具体工厂对象,并调用其 create_product 方法,可以创建具体的产品对象。

以上是一个简单的工厂模式的实现示例,你可以根据具体的需求和业务逻辑进行扩展和修改。


http://lihuaxi.xjx100.cn/news/1359577.html

相关文章

【Linux】Docker 基本管理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Docker 基本管理 Docker 概述Docker 核心概念Docker 安装部署Docker 镜像操作Docker 容器操作 Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵…

计算机基础专升本笔记三 计算机中的数据表示、编码

计算机基础专升本笔记三计算机中的数据表示、编码 一、计算机中的数据的单位 (一)数据存储的单位有哪些? 计算机存储单位有 bit, Byte, KB, MB, GB, TB, PB, EB, ZB, BB来表示。我们经常将Byte简称为B,将KB简称K。 &#xff08…

大口径均匀性大于98%积分球均匀光源

大口径宽视场光学成像遥感器的探测元件采用阵列探测器或多片阵列探测器拼接而成,由于阵列探测器像元间辐射响应差异和光学系统的非理想性,影响了光学成像遥感器的成像质量,进而影响测量的准确性,因此在有效应用前必须对大口径宽视场光学成像遥…

qt操作数据库

#include <QCoreApplication> //添加头文件 #include <qdebug.h> #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>int main(int argc, char *argv[]){QCoreApplication a(argc, argv);//建立并打开数据库QSqlDatabase datab…

【分布式系统案例课】查询服务设计、计数栈选型、总结

查询服务设计 数据获取路径 两个问题考虑&#xff1a; 1、老数据归档的问题。 如果所有分钟小时级的数据一直存在这个DB当中&#xff0c;那么DB的存储空间会被不断的消耗&#xff0c;性能也会不断的下降。所以一旦小时天月的数据聚合完成&#xff0c;我们就可以将一些老的原始…

全面深入理解MySQL自增锁

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

若依前端使用图标

图标 前后端分离的若依前端使用的图标分为两种&#xff1a;分别是svg图标和element的图标 svg图标 1&#xff0c;使用方法 <!-- icon-class 为 icon 的名字; class-name 为 icon 自定义 class--> <svg-icon icon-class"password" class-namecustom-cla…

C# 抽象类和接口详解

参考视频链接&#xff1a;https://www.bilibili.com/video/BV13b411b7Ht?p27&vd_source10065785c7e10360d831474364e0d3e3 代码的进化与重构&#xff0c;从基本代码的讲解到逐步抽象成抽象类和接口。 文章目录 最初定义利用继承改进对方法进一步改进利用虚函数进行改进利…