【Python】设计模式
设计模式分为三种类型,共23类。
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
除了设计模式,还有六大设计原则:
单一职责原则(Single Responsibility Principle)
开闭原则(Open Closed Principle)
里氏替换原则(Liskov Substitution Principle)
迪米特法则(Law of Demeter),又叫“最少知道法则”
接口隔离原则(Interface Segregation Principle)
依赖倒置原则(Dependence Inversion Principle)。
单例模式
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
- 定义:保证一个类只有一个实例,并提供一个访问它的全局访问点
- 适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它时。
单例的实现模式:
-
在一个文件中定义如上代码
class Tools:passtool = Tools() -
在另一个文件中导入对象
from tools import toolt1 = tool t2 = toolprint(t1) # <tools.Tools object at 0x0000020A3F154DC0> print(t2) # <tools.Tools object at 0x0000020A3F154DC0>print(id(t1)) # 2243031289280 print(id(t2)) # 2243031289280 -
可以看出t1和t2是同一个对象。
单例模式优点:
- 节省内存
- 节省创建对象的开销
工厂模式
当需要大量创建一个类的实例的时候,可以使用工厂模式。即,从原生的使用类的构造去创建对象的形式
迁移到,基于工厂提供的方法去创建对象的形式。
# 工厂模式
class Person:passclass Worker(Person):passclass Student(Person):passclass Teacher(Person):passclass Factory:@classmethod # 将该类方法定义为静态方法def get_person(self, p_type):if p_type == 'w':return Worker()elif p_type == 's':return Student()else:return Teacher()worker = Factory.get_person('w')
student = Factory.get_person('s')
teacher = Factory.get_person('t')print(worker)
print(student)
print(teacher)
相关文章:
【Python】设计模式
设计模式分为三种类型,共23类。 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模…...
C++ 数字
C 数字 通常,当我们需要用到数字时,我们会使用原始的数据类型,如 int、short、long、float 和 double 等等。这些用于数字的数据类型,其可能的值和数值范围,我们已经在 C 数据类型一章中讨论过。 C 定义数字 我们已…...
code阶段——gitgitlab安装
在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装 https://git-scm.com/(傻瓜式安装) GitLab安…...
C 风格文件输入/输出---无格式输入/输出
C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 从文件流获取字符 std::fgetc, std::getc …...
Spring-MVC的文件上传下载,及插件的使用(让项目开发更节省时间)
目录 一、概述 ( 1 ) 介绍 ( 2 ) 讲述 二、上传 三、下载 四、jrebel的使用 五、多文件上传 给我们带来什么收获 一、概述 ( 1 ) 介绍 Spring MVC的文件上传下载是指在Spring MVC框架中实现文件的上传和下载功能。文件上传是指将本地计算机上的文件上传到服务器端…...
算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)
使用递归算法实现冒泡: package com.nami.algorithm.study.day06;import java.util.Arrays;/*** beyond u self and trust u self.** Author: lbc* Date: 2023-09-05 15:36* email: 594599620qq.com* Description: keep coding*/ public class BubbleSort2 {// p…...
【计算机视觉 | 目标检测】目标检测常用数据集及其介绍(十五)
文章目录 一、STN PLAD (STN Power Line Assets Dataset)二、Satlas三、Street Dataset四、UAVVaste五、UDA-CH (Unsupervised Domain Adaptation on Cultural Heritage)六、USB (Universal-Scale Object Detection Benchmark)七、VEDAI (Vehicle Detection in Aerial Imagery)…...
洛谷P8814:解密 ← CSP-J 2022 复赛第2题
【题目来源】https://www.luogu.com.cn/problem/P8814https://www.acwing.com/problem/content/4732/【题目描述】 给定一个正整数 k,有 k 次询问,每次给定三个正整数 ni,ei,di,求两个正整数 pi,qi…...
Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。
1.场景 我们在调用接口时,很多时候会同时调用多个接口,接口都是异步执行,我们很难知道调用的多个接口哪个会最后执行完成,我们有时候需要对最后一个接口执行完成的时机监听,所以基于该需求,设计了CombineE…...
2023 年最新Java 毕业设计选题题目参考,500道 Java 毕业设计题目,值得收藏
大家好,我是程序员徐师兄,最近有很多同学咨询,说毕业设计了,不知道选怎么题目好,有哪些是想需要注意的。 确实毕设选题实际上对很多同学来说一个大坑, 每年挖坑给自己跳的人太多太多,选题选得好…...
Mac电脑其他文件占用超过一大半的内存如何清理?
mac的存储空间时不时会提示内存已满,查看内存占用比例最大的居然是「其他文件」,「其他文件」是Mac无法识别的格式文件或应用插件扩展等等...如果你想要给Mac做一次彻底的磁盘空间清理,首当其冲可先对「其他文件」下手,那么我们该…...
geopandas 笔记: datasets 数据集
geopandas 自带的几个数据集 1 世界各个国家 import geopandas as gpd import pandas as pdpd.set_option(display.max_rows,None) gpd.read_file(gpd.datasets.get_path(naturalearth_lowres)) pop_est人口数量continent国家所在的大陆name国家的名称iso_a3国家的三个字母的…...
长胜证券:三大拐点共振 看好智能驾驶新一轮行情
摘要 【长胜证券:三大拐点共振 看好智能驾驭新一轮行情】长胜证券研报指出,全球共振,国内智驾商场正迎来三大拐点:1)技能上,“BEV Transformer数据闭环”新架构2023年开端上车,使得不依靠高精地…...
AIGC专栏5——EasyPhoto AI写真照片生成器 sd-webui插件介绍、安装与使用
AIGC专栏5——EasyPhoto AI写真照片生成器 插件安装与使用 学习前言源码下载地址技术原理储备(SD/Control/Lora)StableDiffusionControlNetLora EasyPhoto插件简介EasyPhoto插件安装安装方式一:Webui界面安装 (需要良好的网络&…...
【Python程序设计】 工厂模式【07/8】
一、说明 我们探索数据工程中使用的设计模式 - 软件设计中常见问题的可重用解决方案。 以下文章是有关 Python 数据工程系列文章的一部分,旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。 迄今为止,…...
PHP8的多维数组-PHP8知识详解
今天分享的是php8的数组中的多维数组,主要内容有:多维数组的概念、创建和输出二维数组、创建和输出三维数组。 1、多维数组的概念 多维数组是包含一个或多个数组的数组。在多维数组中,主数组中的每一个元素也可以是一个数组,子数…...
【【STM32--28--IO引脚的复用功能】】
STM32–28–IO引脚的复用功能 STM32的IO复用功能 何为复用? 我们先了解一下何为通用 IO端口的输入或输出是由GPIO外设控制,我们称之为通用 复用: IO端口的输入或者是输出是由其他非GPIO外设控制就像经常说的USART 由 DR寄存器进行输出 STM32的IO复用功…...
CodeJock Active-X / COM v22.1.0 Crack
CodeJock Active-X / COM v22.1.0--这个支持 Unicode 啦, Unicode Unicode 创建专业应用程序,其中包含一整套高度可定制的用户界面组件,包括 Visual Studio 风格的对接窗格和 Office 风格的功能区、工具栏和菜单,为您的应用程序…...
mac通过docker搭建elasticsearch:8.9.2以及kibana:8.9.2
1.elasticsearch.yml配置修改: cluster.name: "docker-cluster" network.host: 0.0.0.0 http.port: 9200 #discovery.seed_hosts: ["172.17.0.2"]#----------------------- BEGIN SECURITY AUTO CONFIGURATION ----------------------- # # T…...
python实现排列组合代码
def combination(n, c, com1, limit0, per[]):for pos in range(limit, n):t per [pos]if len(set(t)) len(t):if len(t) c:yield [pos, ]else:for result in combination(n, c, com, com * pos, per [pos, ]):yield [pos, ] resultprint("排列:") …...
HunyuanVideo-Foley惊艳效果:AI生成神经反馈音乐与脑波同步音效实验
HunyuanVideo-Foley惊艳效果:AI生成神经反馈音乐与脑波同步音效实验 1. 技术背景与核心能力 HunyuanVideo-Foley是一款突破性的AI音视频生成系统,专为创造沉浸式多媒体体验而设计。该系统最引人注目的能力在于其神经反馈音乐生成技术,能够根…...
Qwen3-TTS-1.7B效果实测:97ms端到端延迟在WebRTC实时语音链路表现
Qwen3-TTS-1.7B效果实测:97ms端到端延迟在WebRTC实时语音链路表现 1. 引言:实时语音合成的技术突破 语音合成技术正在经历一场革命性的变革。传统的TTS系统往往需要数百毫秒甚至数秒的生成时间,这在实时交互场景中几乎无法使用。而Qwen3-TT…...
Cadence 617实战:手把手教你搞定电流镜负载差分放大器的仿真与优化
Cadence 617实战:手把手教你搞定电流镜负载差分放大器的仿真与优化 在模拟集成电路设计中,电流镜负载差分放大器是一个经典而重要的电路结构。它不仅出现在各类运算放大器的输入级,也是理解模拟电路设计原理的绝佳案例。本文将带你从工具实操…...
【信号处理实战】从原理到代码:手把手实现三次样条插值
1. 三次样条插值:从数学定义到生活场景 想象你正在用一根柔软的弹性尺子连接一组图钉,这些图钉固定在木板上代表你的数据点。这根尺子需要光滑地穿过每一个图钉,同时保持自然的弯曲形态——这就是三次样条插值要解决的问题。作为信号处理中最…...
挖漏洞一个月能赚多少钱?挖漏洞入门到精通教程,收藏这一篇就够了
学会网安技术后去挖漏洞一个月能搞多少外快? 现在很多白帽子都是白天上班晚上挖洞,甚至有的人连班都不想上,纯靠挖漏洞来收入,比如说补天上面的这些人,每个月收入较高的都是他们,八成都是在家全职挖洞了。…...
PHPStudy环境下ThinkPHP8与PHP8.2.9的完美搭配:XDbug与Redis扩展实战指南
1. PHPStudy环境与PHP8.2.9的安装配置 对于本地开发环境来说,PHPStudy一直是我的首选工具。它集成了Apache/Nginx、MySQL和PHP,一键安装就能搞定所有基础服务。最近在做一个新项目,需要用到ThinkPHP8框架,所以决定尝试最新的PHP8.…...
AgentScope-Java:以 Agentic 为核心设计,构建可推理、可记忆、可扩展的生产级智能体系统
AgentScope-Java:以 Agentic 为核心设计,构建可推理、可记忆、可扩展的生产级智能体系统 副标题:从 ReActAgent、ReMe 记忆管理到高并发工程化落地,系统讲透 AgentScope-Java 的架构原理与企业级实践 一、为什么企业需要的不是“接个大模型”,而是 Agentic 系统 过去两年…...
手搓LabVIEW声音采集系统——从调参到装X全攻略
Labview程序开发——声音采集系统 基于 Labview软件,以声卡为数据采集设备开发数据采集处理系统。 系统功能应包括: 1)声卡参数设置:包括设备ID号,采样模式,每通道采样点 数,采样率,通道数等参数设置; 2) 文件操作:实现…...
终极鸣潮工具箱:3大核心功能让游戏体验翻倍的完整指南
终极鸣潮工具箱:3大核心功能让游戏体验翻倍的完整指南 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools(鸣潮工具箱)是一款专为《鸣潮》玩家设计的开源游戏辅助…...
Janus-Pro-7B实战案例:电商商品图识别+营销图自动生成
Janus-Pro-7B实战案例:电商商品图识别营销图自动生成 1. 项目背景与价值 电商行业每天都需要处理海量的商品图片和营销素材。传统方式需要人工识别商品信息、手动设计营销图片,不仅效率低下,成本也很高。Janus-Pro-7B作为统一多模态理解与生…...
