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

经典的设计模式和Python示例(一)

目录

一、工厂模式(Factory Pattern)

 二、单例模式(Singleton Pattern)

三、观察者模式(Observer Pattern) 


一、工厂模式(Factory Pattern)

        工厂模式(Factory Pattern):工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

Python 例子:

class Creator:def factory_method(self):raise NotImplementedError('Subclasses must implement this method!')class ConcreteProductA(Creator):def factory_method(self):return ProductA()class ConcreteProductB(Creator):def factory_method(self):return ProductB()class ProductA:passclass ProductB:passdef client_code(creator):product = creator.factory_method()product.do_something()# 使用
creator_a = ConcreteProductA()
client_code(creator_a)creator_b = ConcreteProductB()
client_code(creator_b)

 二、单例模式(Singleton Pattern)

        单例模式(Singleton Pattern):单例模式是一种创建型模式,它确保一个类只有一个实例,并提供一个全局访问点。

Python 例子:

class Singleton:_instance = Nonedef __new__(cls):if cls._instance is None:cls._instance = super().__new__(cls)return cls._instancesingleton_instance = Singleton()
another_instance = Singleton()# singleton_instance 和 another_instance 是同一个实例
print(singleton_instance is another_instance)  # 输出: True

三、观察者模式(Observer Pattern) 

        观察者模式(Observer Pattern):观察者模式是一种行为型模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生改变时,它的所有依赖者(观察者)都会收到通知并自动更新。

Python 例子:

class Subject:def __init__(self):self._observers = []def attach(self, observer):self._observers.append(observer)def notify(self):for observer in self._observers:observer.update()class Observer:def update(self):raise NotImplementedError('Subclasses must implement this method!')class ConcreteObserver(Observer):def update(self):print('Observer received an update!')# 使用
subject = Subject()
observer = ConcreteObserver()
subject.attach(observer)
subject.notify()  # 输出: Observer received an update!

代码之美,在于创造无限可能!

相关文章:

经典的设计模式和Python示例(一)

目录 一、工厂模式(Factory Pattern) 二、单例模式(Singleton Pattern) 三、观察者模式(Observer Pattern) 一、工厂模式(Factory Pattern) 工厂模式(Factory Pattern…...

Ubuntu服务器如何安装桌面

更新软件库 apt-get update 升级软件 apt-get upgrade 安装ubuntu桌面系统 apt-get install ubuntu-desktop 运行过程需要手动确认两次,选择 Y。 安装完成之后,终端输入 reboot,重启服务器。...

填报表如何实现电话号码的校验

单元格校验时,只能输入数字和特定字符(-),即实现固话和手机号码的校验,保证录入的规范,应如何实现? 解决方案:使用正则表达式实现校验效果,如下图所示: 校验…...

揭秘全网热门话题:抖音快速涨粉方法,巨量千川投流助你日增10000粉

在当今社交媒体的时代( 千川投流:hzzxar)抖音成为了年轻人分享自己才华和生活的平台。然而,要在抖音上快速获得关注和粉丝,却不是一件容易的事情。今天,我们将揭秘全网都在搜索的抖音快速涨1000粉的秘籍,带…...

电脑提示‘找不到msvcr110dll,无法继续执行代码’的解决方法,3分钟快速修复

不知道大家有没有遇到过这种情况,无端端电脑提示你找不到msvcr110dll,无法继续执行代码?当出现这个情况,证明你的某个程序就已经运行不了,你需要去修复这个错误,才能正常的运行程序,下面我们一起来详细的了…...

如何在Hostease的Linux虚拟主机上永久移除WordPress网站

最近有遇到客户咨询如何移除Linux虚拟主机上的WordPress网站的, 因为原先的站点长时间不更新,被恶意篡改,跳转到了一个博彩网站上,本身网站也比较旧了,客户也不准备修复,准备重新建站。但是又怕移除不干净&…...

【云原生】Docker 的网络通信

Docker 的网络通信 1.Docker 容器网络通信的基本原理1.1 查看 Docker 容器网络1.2 宿主机与 Docker 容器建立网络通信的过程 2.使用命令查看 Docker 的网络配置信息3.Docker 的 4 种网络通信模式3.1 bridge 模式3.2 host 模式3.3 container 模式3.4 none 模式 4.容器间的通信4.…...

如何优雅的实现浏览器多标签通讯

前言 开发过程中无法避免遇到需要进行多标签通讯的情况,例如: 管理员登陆后,其他打开标签的页面登陆状态要变更课堂页面只能打开一个,另一个则通知失效等等。。。场景 然而实现该功能,我们需要使用页面能共同持有的…...

刷题之不相同的字符串(卡码网模拟)

卡码网不同的字符串 #include<vector> #include<string> #include<iostream> using namespace std; int main() {int n0;cin>>n;for(int i0;i<n;i){string s;cin>>s;vector<int>hash(26,0);for(int j 0;j < s.size();j)hash[s[j…...

JS-导入导出

export和export default是ES6中导出模块中变量的语法 导入导出变量 //导出方法&#xff08;js文件中&#xff09; export const 变量名值//导入方法 对应导入的变量&#xff0c;一定要加花括号 import {变量名} from js文件路径 导入导出函数 //导出方法&#xff08;js文件中…...

【代码随想录——数组篇】

代码随想录——数组篇 2. 二分查找3. 移除元素4. 有序数组的平方5. 长度最小的子数组6. 螺旋矩阵II 2. 二分查找 力扣题目链接 前提&#xff1a; 有序数组数组中无重复元素 代码&#xff1a; &#xff08;版本一&#xff09;左闭右闭区间 class Solution {public int sea…...

使用 js 类封装项目中音频播放功能的工具方法utils

在前端开发中&#xff0c;音频播放功能是一个常见的需求&#xff0c;我们经常需要在项目中加入音频播放、音频提示等功能。为了提高开发效率和代码复用性&#xff0c;我们可以封装一个工具方法来管理音频播放功能。 在本文中&#xff0c;我将介绍如何封装项目中音频播放功能的…...

【超详细】R语言贝叶斯方法在生态环境领域中的高阶技术应用

查看原文>>>R语言贝叶斯方法在生态环境领域中的高阶技术应用 目录 专题一&#xff1a;前期资料 专题二&#xff1a;R和Rstudio入门和绘图&#xff08;含ggplot&#xff09; 专题三&#xff1a;R语言数据清洗-tidyverse包应用 专题四&#xff1a;贝叶斯回归模型-回…...

Python 正则表达式 re . 符号

Python 正则表达式 re . 符号 正文示例1示例2 正文 用法说明&#xff1a;(点号) 在默认模式下&#xff0c;匹配除换行符以外的任意字符。 如果指定了 flags 参数 DOTALL &#xff0c;它将匹配包括换行符在内的任意字符。 示例1 import restr1 abcde print(re.search(., str…...

智慧监控 高效运维

随着企业IT建设的不断深入和完善&#xff0c;IT管理的重要性逐渐被重视&#xff0c;打通数据割裂&#xff0c;使业务更加充分融合。亟需一套统一的平台来实现跨品牌跨设备类型的集中监控和管理。 LinkSLA带外监控平台&#xff0c;不仅适用于大规模或超大规模的运维场景&#x…...

JAVA每日面试题(一)

Java面试问题及答案 1. 解释Java中的垃圾回收机制和如何优化它 问题&#xff1a; 在Java中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;是如何工作的&#xff1f;作为一名Java开发者&#xff0c;你如何优化垃圾回收以提高应用性能&#xff1f; 答案…...

Java数组创建与使用

一.创建和初始化 1.数组是怎么创建的&#xff1f; 直接举例子&#xff1a; int[] arr new int[10]; 这里只简单的举一个int开辟数组的例子。 可见java数组的创建于C语言是不同的。前面是一个int[ ]就是一个数组的数据类型&#xff0c;后面的arr是数组名&#xff0c;最后[…...

EMAP如何建数据源

新建数据源&#xff1a; EMAP底座的数据源&#xff0c;名称为“DB_EMAP_BIZ_BASE"&#xff0c;不可随意更改. 新建业务系统数据源&#xff0c;名称为”DB_STUDY_BIZ_BASE". 支持的数据库&#xff1a; 支持两种类型数据库&#xff1a;H2 和 oracle 新建H2数据源&am…...

在 Linux 中创建文件

目录 ⛳️推荐 前言 使用 touch 命令创建一个新的空文件 使用 echo 命令创建一个新文件 使用 cat 命令创建新文件 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到…...

高德地图+HTML+点击事件+自定心信息窗体

代码如下 <!doctype html> <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"initial-scale1.0, user-scalableno, width…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...