写python代码,怎么用工厂模式思维设计接口?

接口的好处

接口就是抽象方法,用来设计后架构,后端开发者和客户端调用者都可以使用这个接口规则同步写代码,客户端调用者(app、网页甚至时自动化接口测试)不用担心后端对接口的实现细节具体是什么样子的。直接去调用就行,时间上也不用等后端开发把代码写完再去写app、网页和测试代码,大大简化了开发流程复杂程度。

在这里插入图片描述

接口的抽象类和接口具体实现

首先定义好接口的两个方法;这个是接口的抽象类,也就是告诉前端开发者你只需要关注调用时要使用postget两个函数,调用时不要拼写错误。告诉后端开发者,你要实现细节是上传数据要使用post ,下载数据要使用get。不要搞错了。有了这个抽象类,前后端开发者可以同步去做各自的事情,而不用担心最后合并时出现冲突。比如我前端搜索框嵌入了post, 你后端实现的时候写成了send。这样我们就出现了冲突。

from abc import ABCMeta, abstractmethod
class Protocol(metaclass=ABCMeta):'''协议抽象类,具体需实现http/websocket/tcp传输协议'''@abstractmethoddef post(self, body):'''发送请求的接口'''pass@abstractmethoddef get(self):'''获取数据的接口'''pass

有了接口方法postget后,对于后端开发者来说,我不仅需要支持http协议的post/get ,还要支持websocket的post/get。但又不能影响到前端开发者调用时出问题。怎么办?那就是根据不同的协议去开发postget

import requests
import socket
#http协议
class HttpProtocol(Protocol):def __init__(self, ip):self._ip = ipdef post(self,body):http.request('POST', url, body=json.dumps(body))def get(self):http.get('get', url)#websocket协议 
class WebSocketProtocol(Protocol):def __init__(self, ip):self._ip = ipdef post(self, body):"""retrieve URL path from body"""if 'requestUrl' not in body:print('requestUrl is needed for WebSocket request')return Falsewith self._ws_mutex:self._requests.append(json.dumps(body))print('已经发送: {}'.format(json.dumps(body)))return self.get_data()def get(self):while True:# connect to serverif not self._connected:self._try_connect()if not self._connected:time.sleep(0.1)continue

有了接口,针对不同的ip进行连接

class TransportationFactory(metaclass=ABCMeta):'''传输层连接到ip'''@abstractmethoddef connect(self,ip):'''连接到ip'''passclass HttpTransportation(TransportationFactory):def connect(self,ip):return HttpProtocol(ip)class WebSocketTransportation(TransportationFactory):def connect(self,ip):return WebSocketProtocol(ip)class TcpTransportation(TransportationFactory):def connect(self,ip):return TcpProtocol(ip)

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

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

相关文章

QTimer::singleShot()

QTimer::singleShot() 是 Qt 框架中的一个静态函数,用于创建一个单次定时器事件。它的作用是在指定的时间间隔之后触发一个单次的定时器事件,然后停止定时器。 其函数原型为: static void QTimer::singleShot(int msec, const QObject *rec…

获取欧洲时报中国板块前新闻数据(多线程版)

这里写目录标题 一.数据获取流程二.获取主页面数据并提取出文章url三.获取文章详情页的数据并提取整体代码展示 一.数据获取流程 我们首先通过抓包就能够找到我们所需数据的api 这里一共有五个参数其中只有第一个和第五个参数是变化的第一个参数就是第几页第五个是一个由时…

STM32学习和实践笔记(40):DS18B20温度传感器实验

1.DS18B20介绍 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。 DS18B20温度传感器具有如下特点: 1、适应电压范围更宽,…

Spring 的核心注解

Spring框架使用了一系列的核心注解来支持其功能,以下是一些最常用的Spring注解: 1. Component: - 用于标记类为Spring组件,Spring容器会管理这些类的对象。 2. Service: - 特定于服务层的Component注解,表示一个服务组件。…

Qt 多窗体、复用窗口的使用

1.继承自QWidge的窗口的呈现,作为tabPage呈现,作为独立窗口呈现 2.继承自QMainWindow的窗口的呈现,作为abPage呈现,作为独立窗口呈现 1. 继承自QWidge的窗口的呈现 1.1 作为tabPage呈现 void MutiWindowExample::on_actWidgetI…

分项加载页面统计数据

我们在做一个统计页面时,原来大约有1000万左右的数据进行查询,还可以接受,但是随着业务量的增大,目前有3000多万的数据来统计,一次统计出查询结果就很慢很慢,有时候会出现超时异常。 为了解决这个问题&…

云计算数据中心(一)

目录 一、云数据中心的特征二、云数据中心网络部署(一)改进型树结构(二)递归层次结构(三)光交换网络(四)无线数据中心网络(五)软件定义网络 一、云数据中心的…

Briefcase:将Python项目转化为多平台应用的利器

文章目录 引言官网链接原理基础使用安装 Briefcase初始化项目构建应用创建应用包 高级使用应用程序配置和定制化与打包工具的集成自动处理依赖关系 优缺点优点缺点 总结 引言 Briefcase 是一个功能强大的工具,主要用于将 Python 项目转化为多种平台的独立本地应用。…

java 项目使用 acitiviti 流程引擎中的人员设置

学习目标: 目标 [ ]了解 java 项目使用 acitiviti 流程引擎中的人员设置 知识小记: - [x] 1、人员选择说明 - [x] 2、分配任务候选人 任务的候选人是指有权限对该任务进行操作的潜在用户群体,这个用户群体有权限处理(处理、完成)该任务…

最多可以派出多少支球队

最多可以派出多少支球队 解决“最多可以派出多少支球队”的问题需要准确理解题目要求,选择合适的算法(如贪心算法和双指针技术),并注意对原始数据进行适当的预处理(如排序)。在编程实现过程中,有…

MySQL索引重要知识点

1.什么是索引? 索引在项目中是比较常见的,它是帮助MySQL高效获取数据的数据结构,主要是用来提高数据检索的效率,降低数据库的I0成本,同时通过索引列对数据进行排序,降低数据排序的成本,也能降低…

Vue2中的进度条案例

v-bind对于样式控制的增强--操作style 语法&#xff1a; :style “样式对象” 适用于某个具体属性的动态设置 <div class"box" :style"{css属性名1:css属性值,css属性名2:css属性值}"></div> <!DOCTYPE html> <html lang"en&…

java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】

1、问题描述 学习SparkSql中&#xff0c;将spark中dataframe数据结构保存为jdbc的格式并提交到本地的mysql中&#xff0c;相关代码见文章末尾。 运行代码时报出相关配置文件错误&#xff0c;如下。 根据该报错&#xff0c;发现网络上多数解决方都是基于java开发的解决方案&a…

uniapp字符串转base64,无需导入依赖(多端支持)

使用示例 import { Base64Encode, Base64Decode } from "@/utils/base64.js" base64.js const _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";export const Base64Encode = (text)

网络准入控制设备是什么?有哪些?网络准入设备臻品优选

小李&#xff1a;“小张&#xff0c;最近公司网络频繁遭遇外部攻击&#xff0c;我们得加强一下网络安全了。” 小张&#xff1a;“是啊&#xff0c;我听说实施网络准入控制是个不错的选择。但具体什么是网络准入控制设备&#xff1f;我们有哪些选择呢&#xff1f;” 小李微笑…

linux文件处理----学习记录

cat file1 file2 >> combined_filefile1 file2会依次加到指定的文件后面 查看文件里有多少行&#xff1a;wc -l filename 搜索某个文件里面是否包含字符串&#xff1a; grep "search-content" filename 打印偶数行内容&#xff1a; awk NR%20 test.txt 循…

iredmail服务器安装步骤详解!如何做配置?

iredmail服务器安全性设置指南&#xff1f;怎么升级邮件服务器&#xff1f; iredmail是一个功能强大的邮件服务器解决方案&#xff0c;它集成了多个开源软件&#xff0c;使您能够快速部署和管理邮件服务。AokSend将逐步引导您完成安装过程&#xff0c;无需深入的编程知识即可轻…

AI智能名片在Web 3.0技术栈中的应用与前景研究

摘要&#xff1a;在Web 3.0的浪潮中&#xff0c;AI智能名片作为一种创新的数字工具&#xff0c;正逐步渗透到商业交流的各个层面。本文深入探讨了AI智能名片在Web 3.0技术栈中的具体应用&#xff0c;详细分析了其背后的技术支撑、应用场景、优势以及面临的挑战。通过案例分析、…

A Survey on Multimodal Large Language Models综述

论文题目:A Survey on Multimodal Large Language Models 论文地址:https://arxiv.org/pdf/2306.13549 话题:多模态LLMs综述 MLLMs Paper: https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models 1. 摘要 近期,以GPT-4V为代表的跨模态大型语言模型(MLLM…

Java版【植物大战僵尸+源码】

上期回顾&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是植物大战僵尸。 《植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵&#xff0c;每种僵尸都有不同的特点&#xff0c;例如铁桶僵尸拥有极强的抗…