Python工厂设计模式:简化对象创建

Python工厂设计模式:简化对象创建

    • 引言
    • 什么是工厂模式?
    • 简单工厂模式示例
      • 定义基类和子类
      • 创建工厂类
      • 使用工厂创建对象
    • 优点
    • 使用场景
    • 总结

引言

在编程中,我们经常需要创建不同的对象,但有时创建对象的逻辑可能会变得复杂。工厂设计模式可以帮助我们简化这个过程,使代码更整洁、更易于维护。本文将介绍工厂模式的基本概念、实现方法以及使用场景,适合初级Python程序员学习。

什么是工厂模式?

工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但让子类决定实例化哪一个类。这样,客户端无需直接创建对象,而是通过工厂来生成对象。

简单工厂模式示例

假设我们有一个动物类,其中有狗和猫两个子类。我们希望根据用户输入创建不同的动物实例。

定义基类和子类

class Animal:def speak(self):passclass Dog(Animal):def speak(self):print("汪汪")class Cat(Animal):def speak(self):print("喵喵")

创建工厂类

class AnimalFactory:animals = {"dog": Dog,"cat": Cat}@staticmethoddef create_animal(animal_type):if animal_type in AnimalFactory.animals:return AnimalFactory.animals[animal_type]()else:raise ValueError("不支持的动物类型")

使用工厂创建对象

animal = AnimalFactory.create_animal("dog")
animal.speak()  # 汪汪

优点

  1. 降低耦合度:客户端不需要知道具体创建了哪个类的实例,只需与工厂交互。
  2. 易于扩展:增加新子类时,只需在工厂类中添加新的映射,而不需要修改客户端代码。

使用场景

  1. 复杂对象创建:当对象创建逻辑复杂时,工厂模式可以简化这一过程。
  2. 条件化对象创建:根据不同的条件创建不同的对象,如用户等级创建不同类型的用户对象。
  3. 数据库连接:根据配置创建不同的数据库连接对象,如MySQL、PostgreSQL等。

总结

工厂模式是一种 powerful 的设计模式,适用于需要创建复杂对象或根据条件创建不同对象的场景。通过工厂类,我们可以降低代码之间的耦合度,并使代码更易于维护和扩展。希望本文能帮助你理解工厂模式的精髓,并在实际项目中加以应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程池+线程安全+常见锁

目录 一、线程池1、日志与策略模式2、线程池设计3、线程安全的单例模式(1)单例模式的特点(2)饿汉实现方式和懒汉实现方式(i)饿汉方式实现单例模式(ii)懒汉方式实现单例模式&#xff…

数据结构6.4——归并排序

基本思想: 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个…

vue3+element-plus导航栏定位

一、父组件代码&#xff1a; <template> <div v-loading"loading" class"stock-detail" scroll"handleScroll"> <!-- tab导航栏 --> <navList :tabActive"activeIndex" :tabList"tabList" :tabStyle&…

数仓高频面试 | 数仓为什么要分层

大家好&#xff0c;我是大D呀。 关于数仓分层&#xff0c;在面试过程中几乎是必问的。不过&#xff0c;面试官一般也不会直接考你数仓为什么要分层&#xff0c;而是在你介绍项目时&#xff0c;可能会换一种形式来穿插着问&#xff0c;比如数据链路为什么要这样设计&#xff0c…

revit转gltf,revit转3dtiles,如何将Revit模型转为3DTiles格式并在Cesiumjs中高效可视化

Revit模型导出gltf、glb与3dtiles有多种方式&#xff0c;但一般的商业工具收费普遍较高&#xff1a;Cesiumlab导出3dTile格式数据&#xff0c;Cesiumlab暂时可试用3天&#xff0c;会员版收费每年800&#xff1b;BimAngleEngine导出3dTile格式数据BimAngleEngine暂时可试用30天&…

可视化建模与UML《部署图实验报告》

一、实验目的&#xff1a; 1、熟悉部署图的基本功能和使用方法。 2、掌握使用建模工具软件绘制部署图的方法 二、实验环境&#xff1a; window11 EA15 三、实验内容&#xff1a; 根据以下的描述&#xff0c;绘制部署图。 网上选课系统在服务器端使用了两台主机&#xff0c;一…

在CentOS中安装和卸载mysql

在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…

三相电机不转,如何判断好坏?

在现代工业生产中&#xff0c;三相电机被广泛应用于各类机械设备中&#xff0c;由于其高效能和稳定性&#xff0c;成为驱动设备的首选。然而&#xff0c;在实际使用过程中&#xff0c;三相电机有时会出现不转动的情况&#xff0c;这不仅会影响生产效率&#xff0c;还可能对设备…

ChatGPT大模型 创作高质量文案的使用教程和案例

引言 随着人工智能技术的飞速发展,大语言模型如 ChatGPT 在创作文案、生成内容方面展现出了强大的能力。无论是个人用户还是企业用户,都可以利用 ChatGPT 提高工作效率、激发创意、甚至解决实际问题。本文将详细介绍 ChatGPT 如何帮助创作各类高质量文案,并通过具体案例展示…

使用ERA5数据绘制风向玫瑰图的简易流程

使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图&#xff0c;想到的还是高分辨率的ERA5land的数据&#xff08;0.1分辨率&#xff0c;逐小时分辨率&#xff0c;1950年至今&#xff09;。 风向&#xff0c;我分为了16个&…

软考:工作后再考的性价比分析

引言 在当今的就业市场中&#xff0c;软考&#xff08;软件设计师、系统分析师等资格考试&#xff09;是否值得在校学生花费时间和精力去准备&#xff1f;本文将从多个角度深入分析软考在不同阶段的性价比&#xff0c;帮助大家做出明智的选择。 一、软考的价值与局限性 1.1 …

Qt绘制仪表————附带详细说明和代码示例

文章目录 1 效果2 原理3 编码实践3.1 创建仪表属性类3.2 设置类属性3.3 绘制图案3.3.1 设置反走样3.3.2 绘制背景3.3.3 重新定义坐标原点3.3.4 绘制圆环3.3.5 绘制刻度线3.3.6 绘制刻度线上的描述值3.3.7 绘制指针3.3.8 绘制指针数值和单位3.3.9 控制指针变化 扩展福利参考 1 效…

vue 纯前端预览pdf,纯前端实现pdf加水印下载文件也带水印,防止pdf下载

效果图 1.pdf预览 原理:主要是利用pdfh5这个插件来完成的 使用方法: 1.页面需要有一个容器例子: 2.下载pdfh5插件 npm install pdfh5 (注意:webpack5之后不会下载polyfill 需要手动下载 所以引入pdfh5的时候会报错) 解决方案:下载 node-polyfill-webpack-plugin npm i…

重生之我在异世界学编程之C语言:深入文件操作篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 函数递归与迭代 引言正文一、为什么要用文件二、文…

linux-16 关于shell(十五)date,clock,hwclock,man,时间管理,命令帮助

想显示一下当前系统上的时间该怎么显示&#xff1f;有一个命令叫做date&#xff0c;来看date命令&#xff0c;如下图&#xff0c; 第一个星期几对吧&#xff1f;然后是月日小时分钟秒&#xff0c;最后一个是年对吧&#xff1f;CST指的是它的时间格式&#xff0c;我这个可以先姑…

【Apache paimon】-- 集成 hive3.1.3 异常

目录 1、场景再现 Step1:在 hive cli beeline 执行创建 hive paimon 表 Step2:使用 insert into 写入数据 Step3:抛出异常 2、原因分析 Step1:在 yarn resource manager 作业界面查询 hive sql mr job 的 yarn log Step2:搜索job 使用的 zstd jar 版本 Step3:定…

严蔚敏老师,一路走好

Hey&#xff0c;小伙伴们&#xff0c;今天我要和大家分享一个令人心痛的消息&#xff0c;但也是我们向一位伟大的学者致敬的时刻。&#xff1a;清华大学计算机教授、《数据结构》编著者严蔚敏 去世&#xff0c;享年 86 岁。她的离去&#xff0c;让无数学子和同行感到深深的哀痛…

Input Action (输入动作) 在虚幻引擎中常用的值类型

1. Digital (bool) 含义: Digital 类型代表一个离散的、二元的输入状态,它只有两种可能的值:true(按下,激活)或 false(未按下,未激活)。 用途: 最常用于表示按键或按钮的按下状态。 适合于开关类型的操作,比如: 跳跃(按键按下时跳跃,松开时不跳跃) 奔跑/行走切换 …

PostgreSQL的学习心得和知识总结(一百六十四)|深入理解PostgreSQL数据库之在 libpq 中支持负载平衡

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

智能机器人技术突破,开启移动领域无限可能

移动机器人已经成为现代社会不可或缺的一部分&#xff0c;在各个领域发挥着越来越重要的作用。在这个过程中&#xff0c;富唯智能机器人以其卓越的技术突破&#xff0c;引领着移动机器人领域的发展潮流。 一、技术突破的体现 1.深度学习与计算机视觉&#xff1a;富唯智能机器人…